1,线程:一堆指令的集合,OS去调度CPU的最小单位就是线程,
线程被包含在进程中,是进程中的实际操作单位。
2,不同的应用软件占用不同的内存,否则可以相互访问,就没有安全性了。每一个程序的内存是独立的。
3.进程:一个程序的各种资源的集合叫进程。
4.进程要操作CPU,必须要先创建一个线程。操作CPU是通过线程来实现的。
5.进程就是屋子,线程就是屋子里的各个人,是活的;桌子,空间等。进程不能执行,进程想要执行,必须先创建至少一个线程。
6.CPU本身是不存数据的,CPU本身只负责运算。多个线程可以分享一个CPU。
7.一个进程可以包含一个或多个线程。All the threads in a process have the same view of the memory.
所有在同一个进程里的线程是共享同一块内存空间的。这个内存空间中包含:文件描述符,安全验证的信息等。
8.一个执行的程序的实例称为进程。每一个进程都有唯一的进程标识符,PID号。
Each process is started with a single thread, oftern called the primary thread 主线程,but can create additional threads from any of its threads.
主线程可以创建子线程,子线程还可以再创建子线程。创建完以后就变成独立平等的线程了。几者之间没有隶属关系。
9.进程快还是线程快?
两者没有可比性,进程要执行必须通过线程,所以他问的是两个线程哪个快?
10.启动一个线程快(就是一串指令),还是启动一个进程快(跟操作系统去申请空间)?
答:启动一个线程快。启动完了以后,两者的运行速度一样快。
11.进程与线程的区别?
1- 线程共享内存空间,进程的内存是独立的。(Word不能访问QQ)
2-两个进程之间是相互独立的。同一个进程下的多个线程直接的数据是共享的,因为他们隶属于同一个进程,所以共享一份数据。
3. 隶属于同一个进程的线程之间,可以直接交流(数据共享,信息传递)
但是两个进程之间想通信必须通过一个中间代理。
4. 创建一个新线程很容易;创建一个新进程需要对其父进程进行一次克隆。
5. 一个线程可以控制和操作同一进程里的其他线程,但是进程只能操作子进程。
6. 对主线程的修改可能会影响其他属于同一进程的线程,对父进程的修改不会影响子进程。
12. IO 操作不占用CPU, 计算占用CPU. (IO: input/output)
python多线程,不适合CPU密集操作系型的任务,适合IO操作密集型的任务。
来个实例感受一下效果:
import threading,time def run(n): print('task',n) time.sleep(2) u1=threading.Thread(target=run,args=("t1",)) #target:调用哪个函数,args:给所调用的函数传参数。 u2=threading.Thread(target=run,args=("t2",)) u1.start() u2.start() run('t1') run('t2')
运行结果:
task t1 task t2 All threading finished
另外一种写法:
import threading,time class MyThread(threading.Thread): def __init__(self,n): super(MyThread,self).__init__() #继承一下父类的__init__() self.n=n def run(self): print('running in task',self.n) t1=MyThread('t1') t2=MyThread('t2') t1.start() t2.start()