并发、非阻塞、事件驱动、上下文切换、多核在现实生活中的例子!

平常生活中就有很多例子可以去研究和理解并发和多线程。

比如:

做饭有几个任务(说简单点):煮饭、炒菜

同步就是,先去煮饭,等20分钟饭煮好了再去炒菜;我想现实生活中没有人去这样做,这样效率太低。

我没必要等到把饭煮熟好了再去炒菜,可以边煮饭边炒菜,并发进行;等菜炒完了,饭也煮好了;这样节省了时间,提高了效率。

这里面我们可以看到:

--并发:煮饭和炒菜是并发执行,我就是CPU(一个人单核);说明单核也能实现并发;

--IO阻塞:煮饭的电饭煲是一个相对耗时的处理动作,比如是一个网络的请求

--非阻塞IO:我CPU按下煮饭操作后就跳出来去炒菜,这个就是非阻塞的IO处理

--事件驱动:饭好了之后有一个事件通知,比如叮的一声,我CPU听到事件可以决定是否进行处理

----上下文切换和多核:如果老婆不在,则只能我自己去盛饭,需要停下炒菜的活儿。如果老婆在,我就跟老婆说饭好了,让老婆去盛饭;我喊的过程是上下文切换,老婆去盛饭是另一个CPU线程开始执行,我不用自己去做;这就是多核带来的好处。

时间: 2024-08-10 15:13:29

并发、非阻塞、事件驱动、上下文切换、多核在现实生活中的例子!的相关文章

python 之网络并发(非阻塞IO模型)

实现gevent模块 服务端: from socket import * import time s = socket() s.bind(('127.0.0.1',8080)) s.listen(5) s.setblocking(False) r_list=[] w_list=[] while True: try: conn, addr = s.accept() r_list.append(conn) except BlockingIOError: # time.sleep(0.05) prin

IO多路复用,同步,异步,阻塞和非阻塞 区别(转)

转自:http://www.cnblogs.com/aspirant/p/6877350.html?utm_source=itdadao&utm_medium=referral 一.什么是socket?什么是I/O操作? 我们都知道unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO.管道.终端,对我们来说,一切都是文件,一切都是流.在信息 交换的过程中,我们都是对这些流进行数据的收发操作,简称为I/O操作(input and outp

(转)IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞 区别

本文来自:https://www.cnblogs.com/aspirant/p/6877350.html?utm_source=itdadao&utm_medium=referral,非常感谢. 如果面试问到IO操作,这篇文章提到的问题,基本是必问,百度的面试官问我三个问题 (1)什么是NIO(Non-blocked IO),AIO,BIO (2) java IO 与 NIO(New IO)的区别 (3)select 与 epoll,poll区别 我胡乱说了一气,自己边说边觉得完蛋了.果然,二面

同步异步与阻塞非阻塞

同步(synchronous)/异步(asynchronous),阻塞(blocking)/非阻塞(non-blocking)两组概念在不同场合有不同的含义. 在操作系统中 阻塞状态是指正在执行的进程由于发生某事情而暂时无法继续执行时,便放弃处理机而处于暂停状态. 进程具有异步性,指:进程各自独立,不可预知的速度向前推进,或者说进程实体按异步的方式运行.正式由于有异步性,所以要同步. 进程同步:对多个相关进程在执行次序上进行协调,以使并发执行的进程之间能有效共享资源和互相合作,从而使程序的执行具

[转] 比较清楚的阻塞与非阻塞和同步与异步

作者:Shihui wang链接:http://www.zhihu.com/question/19732473/answer/14413599来源:知乎 阻塞非阻塞表示下面 买书过程中  可能出现的状态,是从 我 这个单进程角度来看待这个买书这个问题. 同步异步表示一种协作方式,是从全局更高的角度 “进程之间 合作的方式” 来看待买书这个业务.两个进程之间如果商量采用异步方式处理买书这一业务,就不存在阻塞这种状态. ============= A.概念阻塞非阻塞: 请求不能立即得到应答,需要等待

【Networkk】一篇文章完全搞清楚 scoket read/write 返回码、阻塞与非阻塞、异常处理 等让你头疼已久的问题

浅谈TCP/IP网络编程中socket的行为 我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: 1. TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) 2. Socket I/O系统调用(重点如read/write),这是TCP/IP协议在应用层表现出来的行为. 3. 编写Performant, Scalable的服务器程序.包括多线程.IO Multiplexing.非阻塞.异步等各种技术. 关于TCP/IP协议,建议参考Rich

Java 中阻塞非阻塞io以及同步异步IO

然后借鉴下<Unix网络编程卷>中的理论: IO操作中涉及的2个主要对象为程序进程.系统内核.以读操作为例,当一个IO读操作发生时,通常经历两个步骤: 1,等待数据准备 2,将数据从系统内核拷贝到操作进程中 例如,在socket上的读操作,步骤1会等到网络数据包到达,到达后会拷贝到系统内核的缓冲区:步骤2会将数据包从内核缓冲区拷贝到程序进程的缓冲区中. 阻塞(blocking)与非阻塞(non-blocking)IO IO的阻塞.非阻塞主要表现在一个IO操作过程中,如果有些操作很慢,比如读操作

C/C++网络编程在windows和linux中将socket设置为阻塞和非阻塞

在 socket编程中,对于socket的读写默认都是阻塞的,但有的情况我们需要将其设置为非阻塞,比如做多路复用,或者通过select实现连接超时等功能,将socket设置为非阻塞,在windows和linux中的接口有所不同,在windows中使用ioctlsocket函数,在linux中使用 fcntl函数,下面我们做一个跨平台设置阻塞的函数SetBlock. bool SetBlock(int sock,bool isblock) { int re = 0; //通过宏区分windows和

Linux 设备驱动--- 阻塞型字符设备驱动 --- O_NONBLOCK --- 非阻塞标志【转】

转自:http://blog.csdn.net/yikai2009/article/details/8653697 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 阻塞 阻塞操作 非阻塞操作 阻塞方式-read- 实现 阻塞方式-write- 实现 非阻塞方式的读写操作 实例 --- 读阻塞的实现 实例 --- 按键驱动阻塞实现 1在 open 函数 查看看是 阻塞方式 还是 非阻塞方式 2在 read 函数中同样查看 3应用程序中 1以阻塞方式运行 2以非阻塞方式运行