进程,线程

进程:对各种资源管理的集合。

QQ 要以一个整体的形式暴露给操作系统管理,里面包含对各种资源的调用,内存的管理,网络接口的调用等。

  

线程:是操作系统最小的调度单位,是一串指令的集合

进程 要操作CPU,必须要先创建一个线程,

进程与线程的区别:

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

  同一个进程的线程之间可以直接交流,两个进程想通信,必须通过一个中间代理来实现

  创建新线程很简单,创建新进程需要对其父进程进行一次克隆

  一个线程可以控制和操作同一个进程里的其他线程,但是进程只能操作子进程

并发的多线程效果演示:

import threading
import time
def run(n):
    print("task",n)
    time.sleep(5)
t1 = threading.Thread(target=run,args=("t1",))
t2 = threading.Thread(target=run,args=("t2",))
t1.start()
t2.start()
View Code
import threading
import time

class MyThread(threading.Thread):
    def __init__(self,n):
        super(MyThread,self).__init__()
        self.n = n
    def run(self):
        print("runnint task",self.n)

t1 = MyThread("t1")
t2 = MyThread("t2")

t1.start()
t2.start()
View Code

启50个线程,最后所有都启动后一共用多少时间:

import threading
import time
def run(n):
    print("task",n)
    time.sleep(5)

stat_time = time.time()
t_objs = []    #存线程实例
for i in range(50):
    t = threading.Thread(target=run,args=("t-%s" %i,))
    t.start()
    t_objs.append(t)   #为了不阻塞后面线程的启动,不在这里join,先放到一个列表里
for t in t_objs:  #循环线程实例列表,等待所有线程执行完毕
    t.join()

print("-------all threads has finished...")
print("cost:",time.time()- stat_time)

 守护线程:

import threading
import time
def run(n):
    print("task",n)
    time.sleep(5)

stat_time = time.time()
t_objs = []
for i in range(50):
    t = threading.Thread(target=run,args=("t-%s" %i,))
    t.setDaemon(True)  #把当前线程设置为守护线程
    t.start()
    t_objs.append(t)
# for t in t_objs:
#     t.join()

print("-------all threads has finished...")
print("cost:",time.time()- stat_time)

问题:无论你有多少核,同一时间只能执行一个线程

原文地址:https://www.cnblogs.com/Cohen/p/8762852.html