zoukankan      html  css  js  c++  java
  • 进程,线程

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

    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)

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

  • 相关阅读:
    jenkins免密添加SSH Servers
    Workman启动失败的解决方法 stream_socket_server() has been disabled for security reasons
    jenkins主从从服务器发布脚本执行成功但总提示失败 FATAL: Remote call on XXXX failed
    mac OS配置用户全局环境变量(设置字符集为UTF8)
    使用 Application Loader提交IPA文件到苹果市场
    IOS使用批处理打包
    Java进阶知识24 Spring对JDBC的支持
    Java进阶知识23 Spring execution 切入点表达式
    Java进阶知识22 Spring的AOP编程
    Java进阶知识21 Spring的代理模式
  • 原文地址:https://www.cnblogs.com/Cohen/p/8762852.html
Copyright © 2011-2022 走看看