• 进程,线程


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

    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)

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

  • 相关阅读:
    box-sizing
    max-width
    如何编写高质量CSS
    CSS文字大小单位PX、EM、PT
    jQuery设计思想
    pageX,clientX,offsetX,layerX的那些事
    html块级元素和内联元素区别详解
    centos彻底删除mysql
    删:[CentOS 7] 安装nginx
    CentOS7.0安装与配置Tomcat-7
  • 原文地址:https://www.cnblogs.com/Cohen/p/8762852.html
Copyright © 2020-2023  润新知