Python-线程和进程之初解

第一:进程

1.官方解释:

An executing instance of a program is called a process.

程序执行的实例称为进程

Each process provides(提供) the resources(资源) needed to execute a program(执行程序). A process has a virtual address space(内存地址), executable code(可执行代码), open handles to system objects(句柄), a security context(上下文), a unique process identifier, environment variables, a priority class, minimum and maximum working set sizes, and at least one thread of execution(线程). Each process is started with a single thread(由主线程启动进程), often called the primary thread, but can create additional threads from any of its threads.

2.从程序角度理解进程

程序(也就是上文说的execute a program),不能单独运行,必须将程序装载到内存中(a virtual address space),系统为之分配资源才能运行,这样执行的的程序就称为进程,所以进程是程序的一次执行活动,故进程是对各种资源的集合

在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行(以进程为单位,一个时间进程只能做一件事)。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU

第二:线程

1.官方解释:

A thread is an execution context(执行的上下文), which is all the information a CPU needs to execute a stream of instructions(是CPU执行指令流所需要的信息)

Suppose you're reading a book, and you want to take a break right now, but you want to be able to come back and resume reading from the exact point where you stopped. One way to achieve that is by jotting down the page number, line number, and word number. So your execution context for reading a book is these 3 numbers.

If you have a roommate, and she's using the same technique, she can take the book while you're not using it, and resume reading from where she stopped. Then you can take it back, and resume it from where you were.

Threads work in the same way. A CPU is giving you the illusion(错觉) that it's doing multiple computations(多个计算) at the same time. It does that by spending a bit of time on each computation(其实是分割时间分给每一个计算). It can do that because it has an execution context for each computation(相当于每一个计算都有一个书签(执行上下文),来回切换的时候都可以准确定位到上次执行的地方). Just like you can share a book with your friend, many tasks can share a CPU.

On a more technical level, an execution context (therefore a thread) consists of the values of the CPU's registers(CPU寄存器).

Last: threads are different from processes. A thread is a context of execution(一个执行上下文-CPU寄存器的值组合), while a process is a bunch of resources associated with a computation(与计算相关联的一堆资源集合). A process can have one or many threads.

Clarification: the resources associated with a process include memory pages (all the threads in a process have the same view of the memory), file descriptors (e.g., open sockets), and security credentials (e.g., the ID of the user who started the process).

2.从进程的角度理解线程:

    (1).线程是操作系统能够进行运算调度的最小单位,被包含在进程中,是进程中实际运作单位(可以理解为进程中实际活动的人),一个进程中可以并发多个线程,每个线程可以执行不同的任务

    (2).进程与线程区别

  • Threads share the address space of the process that created it; processes have their own address space.

        线程共享内存空间,进程的内存是独立

  • Threads have direct access to the data segment of its process; processes have their own copy of the data segment of the parent process.

        同进程中的线程共享所属进程的志愿,进程是直接copy父进程的数据段,也就是自己造一个一样的

  • Threads can directly communicate with other threads of its process; processes must use interprocess communication to communicate with sibling processes.

        同进程中的线程之间可以直接交流,不同进程之间必须要中间代理来实现通信

  • New threads are easily created; new processes require duplication of the parent process.

        创建进程需要对其父进程进行一次克隆

  • Threads can exercise considerable control over threads of the same process; processes can only exercise control over child processes.

        同进程中的线程可以相互控制,而进程只能对子进程控制

  • Changes to the main thread (cancellation, priority change, etc.) may affect the behavior of the other threads of the process; changes to the parent process does not affect child processes.

第三:看图理解进程与线程

    (1)

    (2)

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章