mpi4py http://python.jobbole.com/87650/?utm_source=blog.jobbole.com&utm_medium=relatedPosts multiprocess http://python.jobbole.com/82045/
软件
程序
进程
程序运行的实例(实体,instance)。
一个程序可以运行多次产生多个进程。
多任务
阻塞与非阻塞
阻塞与非阻塞:区别在于完成一件事情时,当事情还没有完成时,处理这件事情的人除此之外不能再做别的事情;
同步与异步
只要是自己去完成的操作,都是同步的操作。
UNP 的 6.2 节中,最后对异步与同步做的总结非常准确。
POSIX defines these two terms as follows:
A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes.
An asynchronous I/O operation does not cause the requesting process to be blocked.
Using these definitions, the first four I/O models—blocking, nonblocking, I/O multiplexing, and signal-driven I/O—are all synchronous because the actual I/O operation (recvfrom) blocks the process. Only the asynchronous I/O model matches the asynchronous I/O definition.
并发
并行
操作系统对进程的调度
OS的调度职责: CPU调度、内存调度、磁盘调度
进程de三种基本状态
Linux进程状态解析之R、S、D、T、Z、X
http://blog.csdn.net/nilxin/article/details/7437671
进程在运行中不断地改变其运行状态。通常,一个运行进程必须具有以下三种基本状态: 就绪态、执行态、阻塞态。
就绪(Ready)状态
当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
执行(Running)状态
当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。
阻塞(Blocked)状态
等待(wait)态或睡眠(sleep)态。 正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。
很多操作系统教科书将正在CPU上执行的进程定义为RUNNING状态、而将可执行但是尚未被调度执行的进程定义为READY状态,这两种状态在linux下统一为 TASK_RUNNING状态。

linux上进程有5种状态:
1. 运行(正在运行或在运行队列中等待)
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
ps查询标识进程的5种状态码:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct ("zombie") process
利用/proc文件系统
cat /proc/pid/status
这里pid是你的进程ID,看看输出结果,有一栏是State
也可以通过程序打开这个文件查看,不过这个文件是在内存而已。
父子进程的关联性
父进程中fork调用返回子进程的pid,由于子进程没有子进程所以返回0。
进程id 0总是由交换进程使用,所以一个子进程的进程id不可能为0
操作系统会复制一个与父进程完全相同的子进程,虽说是父子关系,但是在操作系统看来,他们更像兄弟关系,这2个进程共享代码空间,但是数据空间是互相独立的,子进程数据空间中的内容是父进程的完整拷贝,指令指针也完全相同,子进程拥有父进程当前运行到的位置。
COW(copy on write,写时复制技术):内核只为新生成的子进程创建虚拟空间结构,它们来复制于父进程的虚拟内存结构,但是不为这些段分配物理内存,它们共享父进程的物理空间,当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间。
复制父进程的环境变量、0-3g数据空间和父进程内存空间中的PCB(进程控制块pid不同)
方法
fork()只能在类UNIX平台上使用
os.fork() os.getpid() os.getppid()
os.wait() os.waitpid()
os.kill()
pstree查看进程树
multiprocessing
Process类
子类化process类
本地消息队列Queue
进程池Pool类
apply_async()
async 英 [ə'zɪŋk] 美 [ə'zɪŋk] adj.异步的
不管上个apply_async()操作是否已经执行完成,只要进程池中有空闲进程就会执行本任务。
apply()
与异步对应的操作------ 同步。
不管进程池是否有空闲进程,都需要阻塞等待上次的apply()操作的任务执行完成后才能执行本次任务。