同步异步阻塞非阻塞杂记
2017-11-10 12:19
113 查看
gevent实现的协程是同步非阻塞还是异步非阻塞?
gevent是一个使用完全同步编程模型的可扩展的异步I/O框架。IO是不是阻塞的和协程是没有关系的,
python本来就能支持
非阻塞IO,
比如在
linux只要用
API,更改了文件描述符的属性就可以
协程是同步的,并不是异步的,
gevent除了协程的支持还要有比如
同步非阻塞IO才行。
nodejs的底层的实现支持
异步非阻塞IO
协程只是改变了写东西的方式,其实实际的东西是没有太大变化的,单线程的代码还是会在单线程上跑,
不过配合
非阻塞IO可以更好的做东西,
golang的协程支持多线程
同步,异步概念
1.同步就是发生调用时,一定等待结果返回,整个调用才结束;
2.异步就是发生调用后,立即返回,不等待结果返回。被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。
同步异步与阻塞,非阻塞区别
1.阻塞/非阻塞, 它们是程序在等待消息(无所谓同步或者异步)时的状态;
2.同步/异步,是程序获得关注消息通知的机制。
同步异步与阻塞,非阻塞组合
1.同步阻塞
效率最低(日志程序)。
2.同步非阻塞
效率也不高(需要轮询)。
3.异步阻塞
一般模式线程回调。
4.异步非阻塞
IOCP。
服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:
(1)同步阻塞IO(Blocking IO):即传统的IO模型。
(2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。
(3)IO多路复用(IO Multiplexing):即经典的Reactor设计模式,有时也称为异步阻塞IO,Java中的Selector和Linux中的epoll都是这种模型。
(4)异步IO(Asynchronous IO):即经典的Proactor设计模式,也称为异步非阻塞IO。
相关文章推荐
- 同步传输、异步传输、阻塞和非阻塞、同步处理、异步处理
- 阻塞非阻塞与同步异步的区别(清晰解释)
- 同步/异步 & 阻塞/非阻塞
- Windows I/O模型、同步/异步、阻塞/非阻塞
- 怎样理解阻塞非阻塞与同步异步的区别?
- 怎样理解阻塞与非阻塞、同步与异步的区别?
- IO概念---同步/异步、阻塞/非阻塞
- IO - 同步,异步,阻塞,非阻塞
- 阻塞非阻塞与同步异步的区别
- 同步异步和阻塞非阻塞
- IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
- 怎样理解阻塞非阻塞与同步异步的区别?
- socket阻塞与非阻塞,同步与异步、I/O模型 .
- 阻塞/非阻塞、同步/异步IO
- 关于网络IO中的同步、异步、阻塞、非阻塞
- 阻塞、非阻塞与同步、异步IO的区别
- 阻塞、非阻塞、异步、同步以及select/poll和epoll
- TCP同步与异步及阻塞模式,多线程+阻塞模式,非阻塞模式简单介绍
- 同步异步与阻塞非阻塞的区别
- 聊聊阻塞与非阻塞、同步与异步、I/O模型