异步编程种类第05章 Await毕竟做了什么?

Installing python 2.7 on centos
6.3

   你可以以如下方式取代:

操作步骤如下:

方法的状态

6)检查Python版本

  在学异步,有位园友推荐了《async in
C#5.0》,没找到汉语版,恰巧也想增强下英文,用自作者愚昧的英文翻译一些第一的有些,纯属娱乐,简单分享,保持学习,谨记谦虚。

sh
sh-4.1# python -V
Python 2.7.9

  要是你以为那件事情没意义翻译的又差,尽情的踩吧。假使您觉得值得鼓励,谢谢留下你的赞,愿爱技术的园友们在随后每五次应该可以突破的时候,不采纳知难而退。在每两回应该单独思考的时候,不拔取与世浮沉,应该奋力的时候,不采用尽量,不辜负每一秒存在的意义。

【参考资料】

  在赏心悦目的场合下,大家希望编程者察觉不到此地的休眠。即使实际上休眠和提示壹个办法的前期实施是很复杂的,C#也将会确保您的代码被晋升,就像什么都没暴发同样。(译者:不得不表扬微软对语法糖的包装和拍卖)。

1)安装devtoolset

第03章 手动编写异步代码

yum groupinstall "Development tools"

写在最终

yum install zlib-devel
yum install bzip2-devel
yum install openssl-devel
yum install ncurses-devel
yum install sqlite-devel

第10章 并行使用异步编程

checking for python... /usr/bin/python
checking for python >= 2.7... not found
configure: error: found python 2.6.6 (/usr/bin/python); required >= 2.7

      
进一步选择类似上一段的类比:多个阻塞型方法更像您暂停一台总计机(S3
sleep),它就算使用较少的财富,但从根本上来讲它一向在运营着。

CentOS 6.6自带的是Python
2.6.6,而编译llvm要求Python 2.7上述。

  其余类其他上下文也会被从当前调用的线程捕捉。他们的支配是经过二个一律名称的类来兑现的,所以本人将列出一些最首要的左右文类型:

5)将python命令指向Python 2.7.9

写在前头

cd /opt
wget --no-check-certificate https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xz
tar xf Python-2.7.9.tar.xz
cd Python-2.7.9

  他们都被存在.NET
垃圾回收堆(GC堆)的3个目的上。因而当你利用await时,一个消耗一些财富的对象将会被分配,不过在一大半场所下不用担心品质难点。

yum中流行的也是Python 2.6.6,只好下载Python 2.7.9的源代码自身编译安装。

第01章 异步编程介绍

./configure --prefix=/usr/local
make && make altinstall

  ·作为三个在编译时的转换,那是3个C#语法糖,为了简略从前复杂的异步代码

4)编译与安装Python 2.7.9

  那是父级上下文,所有其余上下文都以它的一局地。那是.NET的种类机能,如Task使用其捕捉和传颂上下文,可是它自身不带有哪些作为。

————————————–分割线

CentOS上源码安装Python3.4  http://www.linuxidc.com/Linux/2015-01/111870.htm

《Python大旨编程 第二版》.(韦斯利 J. Chun
).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm

《Python开发技术详解》.(
梁鹏,宗杰).[高清PDF扫描版+随书摄像+代码] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python脚本获取Linux系统音讯 http://www.linuxidc.com/Linux/2013-08/88531.htm

Ubuntu下用Python搭建桌面算法交易切磋环境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Python 语言的迈入简史 http://www.linuxidc.com/Linux/2014-09/107206.htm

Python
的事无巨细介绍
请点那里
Python
的下载地址
请点那里 

更加多CentOS相关消息见CentOS 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=14

本文永久更新链接地址http://www.linuxidc.com/Linux/2015-04/116593.htm

本文转发自Linux  公社 源文地址 
http://www.linuxidc.com/Linux/2015-04/116593.htm

await毕竟做了什么?

3)下载并解压Python 2.7.9的源代码

第07章 异步代码的片段工具

2)安装编译Python须要的包包

第13章 WinCR-VT应用中的异步编程

ln -s /usr/local/bin/python2.7 /usr/local/bin/python

  C#是在大部义务是差别目的在于Query表明式中运用await关键字的。是因为那么些地点会被编译成lambda表明式,正因为这么,该lambda表明式须求标记为async关键字。只是那样含蓄的lambda表达式不设有,即使假使实在这么做也会令人confuse。

  C#有一种语法援救我们更是便于的去通过书写querys来落成过滤,排序,分组等目标。这几个query可以被执行在.NET平台上照旧转换成数据库操作如故其余数据源操作。

第05章 Await终归做了怎么

  大家依旧有措施,你可以写当量的表明式,通过选取Linq内部带的开展方法。然后lambda表达式变得明了可读,继而你也就足以标记他们为async,从而选拔await了。(译者:请对照上下代码来阅读)

第06章
以Task为底蕴的异步情势

  当耗时操作为止时,Task类型会有二个概念来表明成功照旧败诉。最简易的就是由IsFaulted属性来向外揭露,在实施进度中爆发特别它的值就是true。await关键字将会发觉到那点同时会抛出Task中涵盖的相当。

  await可以用在其余标志async的艺术和和方法内多数的地点,然而有一些地方你不能用await。小编将分解为啥在好几意况下差距意await。

  在关于如何拔取await关键字没有啥特其他限制,例如,他们可以被用在3个长表达式上,只怕含有不止贰个await:

  lock是一种帮忙编程人员幸免其余线程和当前线程访问同一对象的办法。因为异步代码平常会自由开头推行异步的线程,并且会被回调并且发生回调在二个不确定的时间量之后,即被释放掉后和起先的线程分歧(译者:纵然同一的线程,它也是刑满释放掉之后的了),所以在await上加锁没有其它意义。

第04章 编写Async方法

  为了收集结果,我利用了Task.WhenAll,那是为Task集合所工作的工具,小编将会在第七章介绍细节。

第15章 异步代码的特性

  代码被标记为unsafe的无法包蕴await,非安全的代码应该形成卓殊稀有并且应该保证方法独用和不须要异步。反正在编译器对await做转换的时候也会跳出unsafe代码。(译者:作者以为实在那里并非太在意啦,反正没写过unsafe关键字的代码)

IEnumerable<Task<int>> tasks = alexsInts
.Where(x => x != 9)
.Select(async x => await DoSomthingAsync(x) + await DoSomthingElseAsync(x));
IEnumerable<int> transformed = await Task.WhenAll(tasks);

  请记住替代在catch块中动用block的艺术是在其背后,通过再次回到三个布尔值来记录操作是或不是抛出三个特别。示例如下:

以至被亟需前异步方法都以共同的

  
你大概会狐疑为何在第一种或第两种情景下还采取async。即使那几个方法承诺一贯联手的归来,你是天经地义的,并且那样写同步的代码效指引先异步并且没有await的经过。然后,那只是艺术同步再次回到的动静。比如,多个办法缓存其结果到内存中,并在缓存可用的时候,结果可以被同台地回来,可是当它需要异步的互连网请求。当你知道有三个好机遇让您接纳异步方法,在某种程度上您大概还想要方法再次回到Task只怕Task<T>。(异步:既然方法链中有三个要异步,那么就会影响全部都利用异步)。

目录

           
作者把它乘坐虚拟堆栈跟踪,因为堆栈是二个单线程拥有的这么的定义,并且在异步代码中,当前线程实际的堆栈和发生格外那多少个线程的仓库或然是老大差别的。万分捕捉的是用户意图中的堆栈跟踪,而不是C#什么样抉择执行那几个情势的细节。

      
值得注意的是线程本地存储(TLS),它和CallContext的目的一般,但它在异步的情状下是不工作的,因为在三个耗时操作中,线程被放走掉了,并且大概被用于拍卖其余工作了。你的措施恐怕被唤醒并推行在二个见仁见智的线程上。

IEnumerable<int> transformed = from x in alexsInts
where x != 9
select x + 2;

  异步方法也能觉察到万分。在实施异步方法之间暴发任何尤其,都不会被捕捉,他们会趁机Task的归来而回到给调用者。当暴发那种情况时,倘若调用者在await那些Task,那么十分将会在此间抛出。(译者:以前有讲到很是在异步中会被传送)。在那种方法下,至极通过调用者传播,会形成2个虚拟的堆栈跟踪,完全就如它发出在一道代码中同样。

  
·他是被创设达成的,通过Task.FromResult工具方法。大家将会在第七章详细探索。

  笔者事先说的,使用await只能够消费(调用)异步方法。直到await结果爆发,这几个调用方法的口舌在调用他们的线程中运作,就像是三只方法一致。那格外具有现实意义,特别是以一个共同的进程完结所有异步方法链时。(译者:当使用await的时候,的确就是听从联合的逐条来实施)

  还记得以前异步方法暂停在率先次遇上await时。纵然那样,它有时也不必要暂停,因为偶然await的Task已经完毕了。壹个Task已经被成功的情状如下:

bool failed = false;
try
{
   page = await webClient.DownloadStringTaskAsync("http://oreilly.com");
}
catch (WebException)
{
   failed = true;
}
if (failed)
{
   page = await webClient.DownloadStringTaskAsync("http://oreillymirror.com");
}

第14章 编译器在底部为你的异步做了怎么

  C#将会在您方法苏醒(resume,这里就是仅仅的“復苏”)的时候恢复生机(restore,我以为那里指从内存中回复)那些类其余上下文。复苏上下文将时有发生局部支出,比如,壹个主次在运用模拟(以前的模仿身份之类的)的时候并大方接纳async将会变得更慢一些。作者指出必变.NET创建上下文的效能,除非您觉得那真的有必不可少。

上下文

  关于异步我还有很多思疑,也是随着著作逐步掌握,我也期望能快一些呀。

   ·它运转三个真正的异步操作,然则未来曾经完毕了(很只怕是出于当下线程在碰到await在此之前曾经做了一些事情)。

第09章 异步编程中的非凡

  在拥有业务中最关键的如故三头上下文(synchronization
context),即可以被用来恢复生机措施在3个例外类其他线程上。那对于UI
app尤其重点,就是这种只可以在不利的线程上操作UI的(就是winform
wpf之类的)。同步上下文是一个繁杂的话题,第八章将会详细分解。

  
·当你await的Task完结时,你的法子应该从以前的岗位两次三番,就如它没在早些时候被重回。

  为了规范的弄精晓在你选择await时C#毕竟为大家做了不怎么事情,小编想列出具有关于艺术状态的具备大家记住和驾驭的底细。

  
在一些景色下,保养你的对象不被现身访问是很重大的,可是在并未此外线程在await期间来做客你的靶子,使用锁是不曾须要的。在那一个处境下,你的操作是有个别冗余的,显式地锁定了四次,如下:

  假诺您不够幸运,你大概必要在实施异步操作时保持某种锁。这时,你就要求狼狈周章并一笔不苟,因为普通锁住异步调用能源,而不造成争用和死锁是老大困难的。或许遇到那种气象想其他措施仍然重构你的顺序是最好的选项。

  首先,你方法中本地的变量的值会被记住,蕴含以下值:

  为了去记住剩余部分的表明式的气象在await某个事物时,增加了额外的原则。比如,当我们运转await
StuffAsync()时,await
myTask的结果要求被记住。.NET中间语言(IL)在栈上存储那种子类表明式,因此,这么些栈就是大家await关键字须要仓储的。

第11章 单元测试你的异步代码

  CallContext(那么些东西耳熟能详吧,相信用过EF的都明白)

  异步方法的可怜捕获被微软统筹的玩命和我们如常同步代码一样的。但是异步的复杂意味着他们中间还会稍稍细微差异。在那里我将介绍异步如何简单的拍卖万分,笔者也将在第九章详尽讲解注意事项。

  我们有两种角度来对待C#5.0的async功效特色,越发是await关键字上暴发了何等:

lock (sync)
{
    // Prepare for async operation
}
    int myNum = await AlexsMethodAsync();
lock (sync)
{
    // Use result of async operation
}

语言 1

第02章 为啥接纳异步编程

int myNum = await AlexsMethodAsync(await myTask, await StuffAsync());

  那允许编程者存储他们在逻辑线程的生命周期中直接可用的数额。纵然考虑到在不可胜计场地下有糟糕的表现,它如故可以幸免程序中艺术的参数传来传去。(译者:因为你存到callcontext里,随时都足以收获呀,不用经过传参数传来传去了)。LogicalCallContextis是二个相关的可以跨用应用程序域的。

  ·假使你的法门非静态,那么包涵this变量。那样,你类的积极分子变量在章程唤醒时都以可用的。

第12章 ASP.NET应用中的异步编程

第08章 哪个线程在运作你的代码

  
·它被3个相见await的asunc方法再次回到,可是所await的这些在此以前就已经落成了。

   当您的程序执行遭遇await关键字时,大家想要暴发两件事:

  ·你方法的参数

  此外,你可以动用二个类库来展开拍卖并发控制,比如NAct,大家将会在第十章介绍

  由于最后二个大概性,一些妙趣横生的事体时有暴发在您await三个曾经落成的Task,很只怕是在1个深度的异步方法链中。整个链很像完全同步的。那是因为在异步方法链中,第一个await被调用的法门总是异步链最深的二个。其余的章程到达后,最深的措施才有机遇回到。(
The others are only reached after the deepest method has had a chance to
return
synchronously.译者:根据语法来讲小编的那句话貌似翻译的不科学,可是作者个人认为实在情形就是自家说的那一个样子。在遭受第二个await后,前边异步方法链中的await依次执行,各种再次回到,最终才回到结果到最深的办法,相当于首先个方法,有哲人来提议那里的见识吗?)

休眠和唤醒三个方法

await能用在何方?

  ExecutionContext

  ·其余变量包含循环数

语言,  最珍贵的是,当程序执行到第3个await关键字时,方法便重回了(译者:关于艺术在遇到await时回来,指出读者从第一章拆分的多个艺术来领悟)。就算它不是多少个async
void方法,1个Task在那几个时刻被再次来到,因而调用者可以等待大家以某种方式成就。C#也必须存储一种操作重回的Task的章程,那样当您的措施成功,这一个Task也变得completed,并且执行者也得以重回到方法的异步链当中。确切的建制将会在第十四章中介绍。

  ·在本范围内有着你定义的变量

  
·为了使你的代码异步,当前施行你代码的线程应该被假释。那象征,在一般,同步的角度来看,你的措施应该回到。

  为了成功那几个行为,你的方法必须在遭遇await时刹车,然后在明日的某部时刻復苏执行。

抓获非常

  SecurityContext

  不安全(unsafe)的代码

  我把这么些进度作为1个蛰伏一台计算机的小框框情况来看(S4
sleep)。那几个格局当前的图景会被储存起来(译者:状态存储起来,正如大家第二章厨房尤其例子,大厨会把已位居烤箱中的食品的烹调状态以标签的款型贴在上头),并且这么些措施完全剥离(大厨走了,大概去做其他业务了)。当一台电脑休眠,统计机的动态数据和周转数据被封存到磁盘,并且变得完全关闭。上边那段话和计算机休眠大致一个道理,贰个正在await的章程除了用一些内存,不选用任何财富,那么可以看成这么些正推行的线程已经被释放。

try
{
   page = await webClient.DownloadStringTaskAsync("http://oreilly.com");
}
catch (WebException)
{
   page = await webClient.DownloadStringTaskAsync("http://oreillymirror.com");
}

catch和finally块

  尽管在try块中采纳await是一心同意的,但是她不一致意在catch和finally块中运用。平常在catch和finall块中,格外依旧在仓库中未缓解的情景,并且之后将会被抛出。假如await在那一个随时前应用,栈将会迥然不一致,并且抛出格外的行为将会变得难以定义。

  作为2个使await的长河尽量透明的一部分,C#捕捉种种上下文在遇见await时,然后在苏醒措施使将其回复。

           
即使您熟知.NET十分机制,用大概会担心相当的仓库跟踪在抛出极度时怎么样正确的保存。那在过去只怕是无法的。但是在.NET4.5中,这些界定被修改掉了,通过多个叫做ExceptionDispatchInfo的类,即二个搭档很是的捕捉,抛出和不利的堆栈跟踪的类。

  那是我们发现并找到平时被界定在当前线程的七台河新闻的地点。假诺您的代码需求周转在特定的用户,你或然会,模拟可能扮演那个用户,恐怕ASP.NET将会帮你已毕扮演。在那种气象下,模拟新闻会设有SecurityContext。

  Linq Query表达式

  lock块

  C#也会记住在章程的如何地方会履行到await。那可以动用数字存储起来,用来代表await关键字在现阶段方式的职位。

  
转发和爬虫请声明原文链接http://www.cnblogs.com/tdws/p/5659003.html,博客园
蜗牛 2016年6月27日。

  那都是当真;它们就好像相同枚硬币的两面。在本章,大家将会集中在率先点上来探究异步。在第十四章笔者们将会从另二个角度来探索,即更扑朔迷离的,可是提供了部分细节使debug和天性考虑越来越清晰。

  ·作为一个言语的机能特色,他是二个供你学习的已经定义好的行事

   ·由没遭遇async的async方法重返。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图