zoukankan      html  css  js  c++  java
  • 对于一些概念的澄清

    对于开发人员来说,很多概念总是在使用,面试的时候也会被频繁的问到。其中有几个总是被混淆的概念,也是被反复咀嚼的几个概念。

    1.补足同步、异步、阻塞、非阻塞术语

    首先,需要说明的是 同步、异步、阻塞、非阻塞 这四个概念是被简略掉的说法。

    同步,异步(调用)、阻塞,非阻塞(I/O)这才是稍微完全的说法。单纯的同步,异步,阻塞,非阻塞说明的是工作的方式。而完成的说法则添加了场景。

    将同步,异步,阻塞,非阻塞两个场景进行了区分。

    2.阻塞、非阻塞的场景

    阻塞、非阻塞的场景是在I/O,进行设置的地方就是在处理文件句柄。在Linux服务器代码中一版都有这样的设置

    iret = fcntl(nfd, F_SETFL, O_NONBLOCK)呢,那就是不空等。不进行阻塞,造成CPU空等。

    这就是阻塞、非阻塞I/O场景。

    3.同步、异步场景

    同步、异步调用是一种程序设计的思路。同步是非常显然的。函数一个接一个的执行。

    而异步则是在满足条件下进行调用。其实就是回调。

    比如Linux aio,libev等等著名的异步方式的lib。都是要确定的定义,在各种情况下的方法。

        //设置cb函数,字段等
        ev_io_init(&socket_watcher, accept_cb, sd, EV_READ);
        ev_io_start(loop, &socket_watcher);
     
        ev_timer_init (&timeout_watcher, timeout_cb, 2, 1);
        ev_timer_start (loop, &timeout_watcher);

    然后设置给回调指针。这样的工作方式则是异步。

    4.为什么(异步、非阻塞)概念在混淆

    这两个概念其实有很多人是在一种混淆的状态。为什么因为在很多network lib中,这两种情况同时存在,例如tornado,twisted。而他们的应用场景也没有进行比较深刻的思考。越简单越难啊。真是老虎,老鼠傻傻分不清。

    好了不说了,该洗澡睡觉了。。

  • 相关阅读:
    SpringMVC的文件上传
    关于SringMvc的参数的传递
    Myeclipse配置mybatis的xml自动提示
    SSM配置
    sql中truncate 、delete与drop区别
    局部变量和全局变量的调用
    java中 引用类型 和 基本类型 有何区别?
    mysql--select
    网站建设注意要点
    输入域名之后默认首页跳转到其他链接去
  • 原文地址:https://www.cnblogs.com/tom-zhao/p/4086149.html
Copyright © 2011-2022 走看看