简单解释同步、异步、阻塞、非阻塞、中断、轮询、多线程,协程这几个概念(代码未验证,仅参考)
创始人
2024-06-02 19:30:17
0

科普

同步和异步的区别:
同步和异步是指程序执行的方式,其中同步指程序按顺序执行,每个任务必须等待前面的任务执行完成后才能执行,而异步则指程序可以在执行一个任务时同时执行另一个任务,不需要等待前一个任务执行完毕。

同步( Synchronous )

指的是在执行一个操作时,必须等待该操作完成后才能进行下一步操作。在同步模式下,程序的执行顺序是由代码的顺序决定的。只有一个控制流

异步( Asynchronous )

指的是在执行一个操作时,不需要等待该操作完成,可以同时进行其他操作。在异步模式下,程序的执行顺序不受代码顺序的限制,而是由事件的发生顺序决定的。至少有两个控制流

阻塞和非阻塞的区别:
阻塞和非阻塞是指程序在等待一个操作完成时的状态,其中阻塞指程序在等待操作完成期间无法执行其他操作,而非阻塞则指程序在等待操作完成的同时可以继续执行其他操作。

阻塞( Blocking )

指的是在执行一个操作时,如果该操作没有完成,程序会一直等待,直到该操作完成后才能继续执行下一步操作。

非阻塞( Non-blocking )

指的是在执行一个操作时,如果该操作没有完成,程序不会等待,而是立即返回,继续执行下一步操作。

中断和轮询的区别 :
中断和轮询是指程序获取外部事件的方式,其中中断指程序通过注册一个中断处理程序来响应事件,而轮询则指程序周期性地查询事件是否发生。

中断( Interrupt )

指的是在执行一个操作时,如果发生了某个事件,程序会暂停当前操作,转而去处理事件,处理完事件后再回到原来的操作继续执行。

轮询( Polling )

指的是在执行一个操作时,程序会不断地查询某个状态或者事件是否发生,直到状态或事件发生为止。

多线程( Multithreading )

多线程是指在一个进程内同时执行多个线程,每个线程可以独立地执行不同的任务。多线程可以提高程序的并发性和响应性,但也需要考虑线程同步和资源竞争等问题。

协程( Coroutine )

指的是一种轻量级的线程,可以在一个线程中同时执行多个协程,每个协程可以独立执行一个任务,协程的切换是由程序自己控制的,不需要操作系统的干预,协程可以提高程序的并发性和响应性,也可以避免多线程中的线程同步和资源竞争问题。



Python 示例:

同步:

import time
def task_1():print("Task 1 started")time.sleep(2)print("Task 1 finished")
def task_2():print("Task 2 started")time.sleep(3)print("Task 2 finished")
task_1()
task_2()

异步:

import asyncio
async def task_1():print("Task 1 started")await asyncio.sleep(2)print("Task 1 finished")
async def task_2():print("Task 2 started")await asyncio.sleep(3)print("Task 2 finished")
loop = asyncio.get_event_loop()
tasks = [loop.create_task(task_1()), loop.create_task(task_2())]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

阻塞:

with open('file.txt', 'r') as f:data = f.read() # 程序将会被阻塞直到文件读取完毕process_data(data) 

非阻塞:

import select 
while True:ready_to_read, _, _ = select.select([socket], [], [], timeout_in_seconds)if ready_to_read:data = socket.recv(buffer_size) # 如果没有数据可读,则此处立即返回process_data(data) 

中断:

try:while True:do_something()
except KeyboardInterrupt: # 用户按下了Ctrl+C键cleanup_and_exit()  

轮询:

while not done:result = poll_socket_for_data(socket)if result is None: # 没有新数据可供处理continuehandle_new_data(result)  

多线程:

import threadingdef worker(num):"""thread worker function"""for i in range(num):time.sleep(0.5)print(f'Worker {num} working')threads=[]
for i in range(5):t=threading.Thread(target=worker,args=(i,))threads.append(t)
for thread in threads:thread.start()
for thread in threads:thread.join()

协程:

import asyncioasync def coroutine(i):"""Coroutine that takes an integer argument and prints it."""while True:await asyncio.sleep(i+0.5)now=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]message=f'{now}: Coroutine {i}'print(message)
tasks=[coroutine(i) for i in range (4)]
loop=asyncio.get_event_loop()
try :loop.run_until_complete(asyncio.gather(*tasks))
except KeyboardInterrupt :pass
finally :loop.close()

来源:
Fibers, Oh My!
https://graphitemaster.github.io/fibers/
https://www.v2ex.com/t/923159#reply9

相关内容

热门资讯

女子投诉来伊份粽子吃出带血创可... 转自:财联社【女子投诉来伊份粽子吃出带血创可贴 公司回应】财联社5月11日电,江苏一名消费者苏女士5...
上海警方通报:偷拍女乘客网约车... 【上海警方通报:#偷拍女乘客网约车司机被拘#】#警方通报司机偷拍女乘客已被行拘# 上海市公安局...
激进转型隐忧多,溜溜梅“你没事... (转自:浩海投研Pro)作者/星空下的番茄编辑/菠菜的星空排版/星空下的香菜“你没事儿吧?没事儿就吃...
吴桂英:以重大项目建设提质增效... 转自:长沙发布吴桂英主持召开专题调度会议以重大项目建设提质增效更好支撑长沙高质量发展5月11日,省委...
“哈尔滨银行杯”第22届新晚报... 随着“哈尔滨银行杯”第22届新晚报万人徒步大赛开赛日期临近,冰城市民的期待与热情已被全面点燃。5月1...
14名北大学生联合报案,“00... 近年来,“圈子”文化在年轻人中盛行,许多人因兴趣结识而成为好友,大家对于“同好”也总是会不自觉地多些...
“我只有一罐豆子” 加沙住院病... 转自:央视以色列从3月起全面禁止人道主义援助进入加沙地带,加沙民众的温饱和健康面临严重危机,甚至医院...
产量翻番!这种“明星水果”有望... 夏天快来了“日啖荔枝三百颗,不辞长作岭南人”的时节又到了价格大跳水!暴跌40%近日,潮新闻记者走访水...
“放下手机读会儿书”公益文化品...     5月10日,在浙江省湖州市德清县举办的世界品牌莫干山大会期间,由中共黑龙江省委宣传部、中共湖...
琼州海峡航线于5月10日23时... 转自:中国水运网5月10日晚,记者从湛江海事局获悉,受强风天气影响,自5月10日23时起琼州海峡客滚...
网约车司机偷拍和散布他人隐私被... 5月11日,上海市公安局闵行分局发布警情通报:一网约车司机因偷拍和散布他人隐私被行政拘留。经查,王某...
欧洲天然气市场走势展望 原标题:欧洲天然气市场形势中期展望文/朱岩岩马俊金羽翔,中海石油气电集团有限责任公司,国际石油经济2...
流动见证活力 发展续写繁荣——... 转自:中国水运网厦门港。刚刚过去的“五一”假期,全社会跨区域人员流动量超14.65亿人次,同比增长7...
重庆一高校花75万元买一个路由... 封面新闻记者 马嘉豪近日,有网友发消息称,重庆三峡学院在进行设备采购时,疑似存在违规行为。该校采购的...
科技赋能 向“新”发展——20... CFIC导读◆当前,新一轮科技革命和产业变革深入发展,正在改变品牌的发展模式和竞争格局。科技创新赋能...
“被我爸吓死!”夏天必备,千万... 来源:杭州发布 又到了蚊子每日光顾的时候,每年夏天因为蚊香、电蚊香液、杀虫喷雾等驱蚊产品使用不当产生...
晶泰控股(02228)拟2.5... 晶泰控股(02228)发布公告,于2025年5月10日,买方(本公司全资附属公司)、卖方、担保人及目...
王一博程耳二度合作人鱼 【#王一博程耳二度合作人鱼#】5月11日, 河南籍青年演员 @UNIQ-王一博 主演的电影《人·鱼》...
75万买299元路由器:采购漏... 转自:新京报评论若不打破这种“违规-叫停-再违规”的循环,公共资金的“漏水”将难以堵住。▲重庆三峡学...
网约车司机偷拍女乘客视频发上网... 5月11日,上海市公安局闵行分局官方微博发布警情通报:据媒体此前报道,5月9日,有一IP地址为上海的...