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()
    
  • 相关阅读:
    IDEA的Debug详解
    websocket学习(转载)
    Shiro授权及注解式开发
    Redis分布式缓存安装和使用
    JEESZ-SSO解决方案
    英语是学习Java编程的基础吗
    深入分析 ThreadLocal 内存泄漏问题
    这些JVM命令配置参数你知道吗?
    安全开发Java动态代理
    学java编程软件开发,非计算机专业是否能学
  • 原文地址:https://www.cnblogs.com/momo8238/p/7343828.html
Copyright © 2011-2022 走看看