线程与进程(我的理解)

最近面试有人问到线程与进程的区别,我就说进程是系统资源分配的最小单位,线程是CPU调度的最小单位。但是人家有细问了一下,我就没回答出来,

后来我查查书,没有查到我满意的解释。感觉应该是这样的(以后有新的理解会补充进来,如果有错也会改正O(∩_∩)O~)

最开始没有线程,只有进程,比如写个程序,程序运行起来以后,进程就是程序运行的实例,pid就是进程的标识。

后来有了多处理器啥的,一些程序为了用上这多个CPU,让这些程序共享系统资源等,但每个程序又有自己的一些属性,这些程序就称之为线程。如果这些程序,系统资源啥的都是不共享的,那么这些程序就是进程。

下面是摘自unix高级环境编程的一段话:

1.5.1 程序
程序(p r o g r a m)是存放在磁盘文件中的可执行文件。使用6个e x e c函数中的一个由内核将
程序读入存储器,并使其执行。8 . 9节将说明这些e x e c函数。
1.5.2 进程和进程I D
程序的执行实例被称为进程( p r o c e s s)。本书的每一页几乎都会使用这一术语。某些操作
系统用任务表示正被执行的程序。
每个U N I X进程都一定有一个唯一的数字标识符,称为进程I D(process ID)。进程I D总是
一非负整数。

下面是摘自IBM的官方红皮书:

General Programming Concepts:
Writing and Debugging Programs   这个是(AIX 7.1)
这个也有中文的书籍:AIX V6.1 通用编程概念:编写并调试程序(这段是写的一样的)

Understanding Threads and Processes
A thread is an independent flow of control that operates within the same address space as other
independent flows of controls within a process. Traditionally, thread and process characteristics are
grouped into a single entity called a process. In other operating systems, threads are sometimes called
lightweight processes, or the meaning of the word thread is sometimes slightly different.
The following sections discuss the differences between a thread and a process.
In traditional single-threaded process systems, a process has a set of properties. In multi-threaded
systems, these properties are divided between processes and threads.
Threads have some limitations and cannot be used for some special purposes that require multi-processed
programs. For more information, see “Limitations” on page 366.
Process Properties
A process in a multi-threaded system is the changeable entity. It must be considered as an execution
frame. It has traditional process attributes, such as:
v Process ID, process group ID, user ID, and group ID
v Environment

v Working directory
A process also provides a common address space and common system resources, as follows:
v File descriptors
v Signal actions
v Shared libraries
v Inter-process communication tools (such as message queues, pipes, semaphores, or shared memory)
Thread Properties
A thread is the schedulable entity. It has only those properties that are required to ensure its independent
control of flow. These include the following properties:
v Stack
v Scheduling properties (such as policy or priority)
v Set of pending and blocked signals
v Some thread-specific data
An example of thread-specific data is the errno error indicator. In multi-threaded systems, errno is no
longer a global variable, but usually a subroutine returning a thread-specific errno value. Some other
systems may provide other implementations of errno.
Threads within a process must not be considered as a group of processes. All threads share the same
address space. This means that two pointers having the same value in two threads refer to the same data.
Also, if any thread changes one of the shared system resources, all threads within the process are
affected. For example, if a thread closes a file, the file is closed for all threads.

时间: 2024-10-29 16:47:53

线程与进程(我的理解)的相关文章

关于线程和进程的理解

在知乎上看的关于线程和进程的形象理解,留作纪念. 这个场景是这样子的,山上有座庙(进程),庙里住了很多小和尚和老和尚(线程),当然隔壁山上也有很多尼姑妹子.小和尚和老和尚们每天都需要下山挑水喝.这些个和尚有刚上山的(就是有点傻的),有比较聪明的,也有闹过矛盾的.场景,人物呢,大概就是这么个样子. 俗话说的好,有人的地方就有江湖.这些个小和尚,老和尚都不是很安分,为了每天的这个挑水工作闹了很多很多的矛盾,也犯过很多傻. 下面对挑水工作所有发生的情况做个详述: 1)刚上山的小和尚挑水,就是比较傻的那

线程和进程的理解

今天看了一下进程和线程的一些概念,对线程和进程进行了理解,现在用我实际生活中的一段经历来理解线程和进程. 2008年第一次去老公家, 从北京到山东,整个乘车行程可以说成是一个进程. 记得很清楚,在沧州的时候换了一次车,那么A段(从北京到沧州)可以看成是一个线程,B段(从沧州到山东目的)是一个线程 所以一个进程可以有多个线程,此时的线程是有先后顺序的,A段执行完成了再执行B段.

iOS开发 - 线程与进程的认识与理解

进程: 进程是指在系统中正在运行的一个应用程序,比如同时打开微信和Xcode,系统会分别启动2个进程; 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内; 线程: 一个进程要想执行任务,必须得有线程(每一个进程至少要有一条线程),是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位; 一个进程(程序)的所有任务都在线程中执行; 一个程序有且只有一个主线程,程序启动时创建(调用main来启动),主线程的生命周期是和应用程序绑定,程序退出时,主线程也停止;

线程与进程的理解

1.进程和线程的区别:http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html 2.新手学习多线程的详细思路和流程:http://www.cnblogs.com/xiaoguangit/p/4991825.html 3.我是一个线程:http://kb.cnblogs.com/page/542462/ 4.多线程编程基础知识:http://www.cnblogs.com/cy163/archive/2006/11/02/547428

进程、线程和协程的理解

转自 http://blog.leiqin.info/2012/12/02/%E8%BF%9B%E7%A8%8B-%E7%BA%BF%E7%A8%8B%E5%92%8C%E5%8D%8F%E7%A8%8B%E7%9A%84%E7%90%86%E8%A7%A3.html 进程.线程和协程的理解 进程.线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下. 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度. 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由

进程、线程、协程之概念理解

一.概念 1.进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描述,进程是程序的实体. 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体.它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理

线程与进程的区别以及对多线程并发的理解

转自: http://blog.sina.com.cn/s/blog_12f5264ff0102v8eq.html http://blog.csdn.net/suxinpingtao51/article/details/8113509 http://blog.csdn.net/cqkxboy168/article/details/9026205/ 一.线程与进程的区别 先简单说说线程与进程的概念: (1)进程是指一个内存中运行的应用程序,比如在Windows系统中,一个运行的exe就是一个进程.

进程、线程和协程的理解-自己随笔

1. IO 操作不占用CPU(从硬盘读数据,从网络读数据,从内存读取数据) 计算占用CPU,例如1+1=2的计算就是占用CPU的. python 多线程,不适合CPU密集操作系统的任务,适合IO操作密集型的任务. 2. 进程.线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下. 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度. 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的). 协程和线程一样共享堆,不共享栈,协程由程序

线程、进程 概念理解

1 .什么是线程? 线程是指程序在执行过程中,能够执行程序代码的一个执行单元,在 Java 语言中,线程有四种状态:运行,就绪,挂起,结束. 2 .线程与进程的区别? 进程是一段正在运行的程序,而线程有时也被称为轻量级进程,它是进程的执行单元,一个进程可以拥有多个线程,各个线程之间共享程序的内存空间,但是,各个线程拥有自己的栈空间. 3 .为什么使用多线程? ( 1 ).使用多线程可以减少程序的响应时间.单线程如果遇到等待或阻塞,将会导致程序不响应鼠标键盘等操作,使用多线程可以解决此问题,增强程