zoukankan      html  css  js  c++  java
  • 线程与进程-1

    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()
    
  • 相关阅读:
    Laravel 初始化
    ant design pro 左上角 logo 修改
    请求到服务端后是怎么处理的
    Websocket 知识点
    王道数据结构 (7) KMP 算法
    王道数据结构 (6) 简单的模式匹配算法
    王道数据结构 (4) 单链表 删除节点
    王道数据结构 (3) 单链表 插入节点
    王道数据结构 (2) 单链表 尾插法
    王道数据结构 (1) 单链表 头插法
  • 原文地址:https://www.cnblogs.com/momo8238/p/7343828.html
Copyright © 2011-2022 走看看