同步异步阻塞非阻塞杂记

简介: 版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.csdn.net/Jailman/article/details/78498458 gevent实现的协程是同步非阻塞还是异步非阻塞?gevent是一个使用完全同步编程模型的可扩展的异步I/O框架。
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.csdn.net/Jailman/article/details/78498458

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。






目录
相关文章
|
3月前
|
安全 Java 开发者
深入浅出Java多线程编程
【8月更文挑战第31天】本文旨在通过浅显易懂的语言和实例,为初学者揭开Java多线程编程的神秘面纱。我们将从基础概念出发,逐步深入到多线程的创建、同步机制及实际应用,帮助读者构建起完整的多线程知识体系。文章不仅包含理论介绍,还提供代码示例,让读者能够动手实践,加深理解。无论你是编程新手还是希望巩固多线程知识的开发者,这篇文章都将是你不可多得的学习资源。
|
3月前
|
Java 应用服务中间件 Linux
(九)Java网络编程无冕之王-这回把大名鼎鼎的Netty框架一网打尽!
现如今的开发环境中,分布式/微服务架构大行其道,而分布式/微服务的根基在于网络编程,而Netty恰恰是Java网络编程领域的无冕之王。Netty这个框架相信大家定然听说过,其在Java网络编程中的地位,好比JavaEE中的Spring。
119 3
|
弹性计算 Java Unix
搭稳Netty开发的地基,用漫画帮你分清同步异步阻塞非阻塞
Netty Netty是一款非常优秀的网络编程框架,是对NIO的二次封装,本文将重点剖析Netty客户端的启动流程,深入底层了解如何使用NIO编程客户端。 Linux网络编程5种IO模型 根据UNIX网络编程对于IO模型的分类,UNIX提供了5种IO模型,分别是 阻塞IO 、 非阻塞IO、 IO复用 、 信号驱动IO 、 异步IO 。这几种IO模型在《UNIX网络编程》中有详解,这里作者只简单介绍,帮助大家回忆一下这几种模型。 对于Linux来说,所有的操作都是基于文件的,也就是我们非常熟悉的fd,在缺省的情况下,基于文件的操作都是 阻塞的 。下面就通过系统调用 recvfrom 来回顾下
109 0
|
6月前
|
API iOS开发
总是搞不懂的同步异步,阻塞非阻塞
总是搞不懂的同步异步,阻塞非阻塞
61 0
|
消息中间件 缓存 网络协议
【Netty 从成神到升仙系列 大结局】全网一图流死磕解析 Netty 源码
【Netty 从成神到升仙系列 大结局】全网一图流死磕解析 Netty 源码
【Netty 从成神到升仙系列 大结局】全网一图流死磕解析 Netty 源码
|
存储 缓存 Java
Android多线程编程__同步(上)
在多线程应用中,两个或两个以上的线程需要共享对同一个数据的存取。
150 0
Android多线程编程__同步(上)
|
SQL 缓存 Java
Android多线程编程__同步(下)
在多线程应用中,两个或两个以上的线程需要共享对同一个数据的存取。
107 0
|
存储 Java
《重学Java高并发》之“摸底考试”:你会使用多线程实现生产者-消费者协作模型吗? 原创
《重学Java高并发》之“摸底考试”:你会使用多线程实现生产者-消费者协作模型吗? 原创
《重学Java高并发》之“摸底考试”:你会使用多线程实现生产者-消费者协作模型吗? 原创
|
设计模式 算法 Java
【社区投稿】一看就懂!超全解析 OpenMMLab 的 Hook 机制
OpenMMLab 系列的一大特色是其所采用的 Hook 机制。同样作为计算机视觉算法框架, 相比于简单易懂、对新手友好的 Gluon-CV, Hook 机制无疑提高了初学者入门 OpenMMLab 系列工具箱的难度。一个很自然的问题就是,为什么要引入 Hook 机制?
575 0
【社区投稿】一看就懂!超全解析 OpenMMLab 的 Hook 机制
|
存储 网络协议 安全
好家伙,你这Java网络编程基础可以啊!
通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信。这就好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守,最终完成数据交换。
112 0
好家伙,你这Java网络编程基础可以啊!