原标题:尾递归优化 快速排序优化 CPS 变换 call/cc setjmp/longjmp coroutine 协程 栈编程和控制流 讲解 本文为部分函数式编程的扩展及最近接触编程语言控制流的学习和思考,主题是栈编程和控制流相关,涉及内容有 堆栈编程总结, 函数式语言的CPS变换,python 如何实现尾递归优化装饰器及其思想方法的总结应用,快速排序的算法导论写法的一种视角/分析,C 语言setjmp/longjmp 函数的作用和实现分析,如何实现 C/C++ 下的协程库编写的一些思路和要点分…
一 引子 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞,另外一种情况是该任务计算的时间过长或有一个优先级更高的程序替代了它 ps:在介绍进程理论时,提及进程的三种执行状态,而线程才是执行单位,所以也可以将上图理解为线程的三种状态 一:其中第二种情况并不能提升效率,只是为了让cpu能够雨…
1 引言 协程是近几年并发编程的一个热门话题,与Python多进程.多线程相比,协程在很多方面优势明显.本文从协程的定义和意义出发,结合asyncio模块详细讲述协程的使用. 2 协程的意义 2.1 什么是协程 协程,又称微线程,英文名为Coroutine.对于多线程,在执行一个个不同任务时,遇到阻塞(例如IO操作)时,操作系统会自动将CPU资源切换给另一个线程.但协程不同,协程是用户态的轻量级线程,更多的依靠用户切换. 2.2 协程的作用 与线程不同的是,协程需要用户自己进行手动切换——当某线…
目录 1.线程队列 2.进程池和线程池 3.回调函数 4.协程:线程的具体实现 5.利用协程爬取数据 线程队列 1.线程队列的基本方法 put 存 get 取 put_nowait 存,超出了队列长度,报错 get_nowait 取,没数据的时候,直接报错 [linux windows] 线程中 put_nowait/get_nowait 都支持(区别于进程队列) 2.Queue:先进先出,后进后出 # (1) Queue """先进先出,后进后出""&q…
一.为什么会有协程 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞,另外一种情况是该任务计算的时间过长 ps:在介绍进程理论时,提及进程的三种执行状态,而线程才是执行单位,所以也可以将上图理解为线程的三种状态 其中第二种情况并不能提升效率,只是为了让cpu能够雨露均沾,实现看起来所有任务…
Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件event.协程 目录 Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件event.协程 1. 阻塞 2. 异步调用.同步调用 1. 概念 2. 异步调用 3. 同步调用 3. 异步调用+回调函数 4. 线程queue 5. 事件event 6. 协程 1. 阻塞 进程运行的三个状态:运行,就绪,阻塞 阻塞非阻塞是从执行任务的角度来看的: 阻塞:程序运行时,遇到了IO,…
内嵌表值函数 接上 <T-SQL编程 -- 用户自定义函数(标量函数)> http://www.cnblogs.com/viusuangio/p/6212072.html 内嵌表值函数可以用于实现参数化视图(查询),例如有一个查询其定义语句如下: use Student GO --查询笔试成绩几个的同学 select s.stuno ,s.stuname,s.brithday,e.written,e.lab from StuInfo s left outer join exam e on s.…
什么是函数式编程? 什么是函数式编程? 函数:function 函数式:functional,一种编程范式 函数式编程是一种抽象计算的编程模式 函数≠函数式,比如:计算≠计算机 在计算机当中,计算机硬件是最底层的,而越往上语言越高级 低--------------------------------->高计算机硬件-->汇编语言-->c语言-->Python语言 ↓ ↓ ↓ 指令 函数 函数式计算机------------------------>计算(数学) ○ 函数式编程…
转: ES6异步编程: co函数库的含义与用法 co 函数库是著名程序员 TJ Holowaychuk 于2013年6月发布的一个小工具,用于 Generator 函数的自动执行. 比如,有一个 Generator 函数,用于依次读取两个文件. var gen = function* (){ var f1 = yield readFile('./foo.txt'); var f2 = yield readFile('./bar.txt'); console.log(f1.toString());…
转: ES6异步编程:Thunk函数的含义与用法 参数的求值策略 Thunk函数早在上个世纪60年代就诞生了. 那时,编程语言刚刚起步,计算机学家还在研究,编译器怎么写比较好.一个争论的焦点是"求值策略",即函数的参数到底应该何时求值. var x = 1; function f(m){ return m * 2; } f(x+5); 上面代码先定义函数 f,然后向它传入表达式 x + 5 .请问,这个表达式应该何时求值? 一种意见是"传值调用"(call by v…