并发编程介绍:
要完成某些计算任务经常需要不少时间,其原因有两点:
任务是计算集中型的(比如,求一个很大整数的所有因数),并且需要相当的CPU时间进行计算;或者
任务并不是计算集中型的,但是需要等待某些数据,以产生结果。
等待回应
网络编程的基本功能就是等待数据。想象你有一个函数,这个函数会总结一些信息并且作为电子邮件发送。函数需要连接到一个远程服务器、等待服务器的回应、检查服务器能否处理这封电子邮件、等待回应、发送电子邮件、等待确认信息,然后断开连接。
这其中任何一步都有可能占用很长时间。你的程序可能使用所有可能模型中最简单的一个——它实际上只是停下来等着数据的发送和接收,但在这种情况下,它有非常明显的基本限制:它不能同时发送多封电子邮件;并且在发送电子邮件的时候,它其实什么也做不了。
因此,除了最简单的之外,所有网络程序都会避免这种模型。另外还有许多不同的模型,它们都允许你的程序在等待数据以继续某个任务的同时,继续做手头上的其他任务,这些模型你都可以采纳。
Twisted是众多模型中的一种:在一个线程中,使用非阻塞的系统调用来处理所有连接。
当在一个线程中处理多个连接时,调度就成为了应用程序的责任,而不是操作系统的。调度通常的实现方案是:当连接准备好读或是写时,调度系统会调用一个之前注册过的函数——通常被叫做异步,事件驱动或是基于回调的编程。
在这种模型下,之前发送电子邮件的函数应该是象这样的:
调用一个连接函数,用以连接到远程服务器;
连接函数立刻返回,暗示着当连接建立后,将调用电子邮件发送的通知;并且
连接一旦建立,系统就会通知发送电子邮件的函数,连接已经准备就绪。
从上面的文字当中,可以看出并发编程出现的原因是因为出现了用户的某一个请求是计算集中型的,或者是需要数据等待的类型,这样就造成了各方面的等待现象:人们在计算机旁边坐着等待最终结果的返回,而CPU的资源并没有得到充分的利用,CPU也在等待结果;因为造成的这种等待并不是CPU资源不够用造成的,而是自然规律上需要的等待;大家只要稍微用心考虑一下,就可以想明白。所以如果能将当前等待的事情放置起来,让CPU去先处理其他的工作,等放置起来的任务有结果返回了,再去进行下面的处理。这个过程当中有一个问题,就是如何触发CPU来处理放置起来的工作?
callback
callback(回调)是通知应用程序数据已经就绪的经典模型。应用程序在调用一个方法,试图获取一些数据时,同时提供一个callback函数,当数据就绪时,这个callback函数会被调用,并且就绪的数据就是调用的参数之一。因此,应用程序应该在callback函数中,继续执行之前获取这些数据时,想要执行的任务(当时没能马上得到这些数据,所以当时无法执行这些任务——译者注)。
在同步编程中,一个函数会先请求数据,然后等待数据,最后处理它。在异步编程中,一个函数请求数据之后,会在数据准备就绪后,让外部库调用其callback函数。
分享到:
相关推荐
Twisted与异步编程入门,最好的入门资源。
第二部分:异步编程初探与reactor模式 第三部分:初步认识Twisted 第四部分:由Twisted支持的诗歌客户端 第一个twisted支持的诗歌服务器 第一滴心血 第五部分:由Twisted支持的诗歌客户端 第一滴心血 第六...
Twisted网络编程必备,Twisted是使用Python编写的,强壮的、面向对象的解释性语言。Python使它的爱好者充满热情。使用Python编程是一种乐趣,易于编写、易于阅读、易于运行。因为Python是跨平台的,所以可以运行...
《twisted网络编程.txt 》学习Python,必须要学的twisted。
2020,好不容易找来的资源,一共22章节,169页,很好很新的Twisted与异步编程教程。希望对大家有帮助,。
twisted-intro-cn, 在中文中,异步编程和 Twisted的Dave介绍 异步编程和 Twisted 中的介绍本项目是"twisted与异步编程入门"系列文章的简体中文翻译。原文由Dave撰写,参见 krondo.com 。如果你是Twisted新手,...
Twisted与异步编程入门(汇总版)
Twisted的中文资料比较少,整理出跟大家分享
我学习和使用twisted已经好几年了,通过这几年的学习和工作我得出的结论就是:学习twisted困难的地方就是对异步编程的理解而不是怎样去用twisted 的函数去写代码. twisted 的代码写的都很简洁和清晰,而且有很好的注释...
Twisted Network Programming Essentials,一本介绍socket异步编程框架twisted
网络编程中我们越来越感觉twisted的强大,本教材是一本很好的twisted入门级教材
The Twisted Documentation 电子版 pdf twisted 框架 网络编程
学习python网络编程必须要学的twisted架构,讲的非常全面,并有丰富的代码示例。
英文版本《Twisted Network Programming Essentials》第2版资料,讲Twisted的资料不多,这个资料可算稀缺资源了。
Twisted网络编程中文文档,使我们一个学习Python框架入门的不错资料,希望对各位爱好学习的同志们有帮助。
Twisted Info Twisted入门教程源码
python网络框架twisted教程,事件驱动编程是一个编程范式, 这个程序是由外部事件来决定。通过事件循环及当事件发生时触发回调事件的使用是它的特点。另外两种常见的编程范式是(单线程)同步与多线程编程。
twisted资料twisted资料twisted资料