• 进程与线程


    线程是进程的实体,是CPU调度和分配的基本单位,线程自己基本上不拥有系统资源,只用有一点在运行中必不可少的资源(如程序计数器,寄存器和栈),但是它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程;同一进程中的多个线程之间可以并发执行。相对于进程而言,线程是一个更加接近于执行体的念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在用户看来,多线程是同时执行的。但从操作系统来看,各个线程是交替执行的。系统不停的在各个线程之间切换,每个线程只有在系统分配给他的时间片内才能获得CPU的控制权,执行程序中的代码。
    进程和线程的区别
     (1)线程是进程的一部分,所以线程有时侯被称为轻量级进
     (2)一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个线程,进程执行过程不是一条线,而是多条线共同完成的。
     (3)系统在运行的时候会为每一个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是它所属的进程资源),线程组只能共享资源。那就是说。除了CPU之
    外(线程在运行的时候要占用CPU资源),计算机内部的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。
     (4)与进程控制表PCB相似,线程已有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表中少很多。
     (5)进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。
    如果在主线程中创建线程时,应该让主线程休眠,如果主线程不休眠,它就可能退出,这样在新线程有机会运行之前整个进程可能就已经终止了,所以应该保证在所有的线程运行结束之后,再主线程结束。这种行为特征依赖于操作系统的线程实现和调度算法。
  • 相关阅读:
    单例模式的懒汉式在多线程的问题
    String、StringBuffer、与StringBuilder的区别
    java网络编程(7)——利用tcp实现文件上传
    java网络编程(6)——实现一个服务器把小写转大写
    java网络编程(5)——Tcp
    java网络编程(4)——udp实现聊天
    数据库单表增量备份方案
    java网络编程(3)——UDP
    使用Docker快速搭建Tensorflow开发环境
    word2vec并行实现小记
  • 原文地址:https://www.cnblogs.com/ancient/p/3629219.html
Copyright © 2020-2023  润新知