线程:CPU使用的基本单元(线程ID、程序计数器、寄存器集合、栈)。

多线程:一个进程有多个线程

多线程的优点:

增加响应度:当一个交互程序部分阻塞,该程序能继续执行

一个应用程序在同一地址空间有多个不同的活动线程

经济:进程的创建需要的内存和资源分配比较昂贵,而线程能共享它们所属进程的资源,比较经济,并且,进程创建比线程创建费时,进程切换比线程切换费时

多处理器体系结构的利用:充分使用多处理器体系结构,以便每个进程能并行运行在不同的处理器上。不管有多少个CPU,单线程进程只能运行在一个CPU上。

线程有两种:用户层的用户线程和内核层的内核线程。

用户线程和内核线程建立关系的方法

1.多对一模型:多个用户线程映射到一个内核线程

优点:线程管理是由线程库在用户空间进行的,效率比较高

缺点:当一个线程阻塞,整个进程会阻塞,并且任一时刻只有一个线程能访问内核,多线程不能并行运行在多处理器上

2.一对一模型:将每个用户线程映射到一个内核线程

优点:一个线程阻塞,另个线程继续执行,允许多个线程能并行地运行在多处理器系统上

缺点:每创建一个用户进程需要创建一个内核进程,影响应用程序的性能

3.多对多模型:多路复用了许多用户线程到同样数量或更小数量的内核线程上(内核线程数量和特定机器有关)。也允许一个用户线程绑定到莫个内核线程,这个变种有时被称为二级模型

优点:没有前两者的缺点

多线程编程,每个请求若都要创建新进程处理,则会产生两个问题

1.创建进程的时间,进程用完了就被扔了

2.如果进程数量很多,会耗尽系统资源,如CPU时间和内存

为了解决这些问题,产生了线程池。

线程池,在进程开始时创建一定数量的线程,并放入到池中以等待工作,服务器当收到请求,唤醒线程工作,完成服务,线程又回到线程池中等待,若池中没有可用的线程,服务器就好一直等待有空线程为止。

笔记 线程(threads)的更多相关文章

  1. SYSBIOS学习笔记---线程(Threads)

    在SYS/BIOS中,广义上指被处理器执行的任何独立的指令流.线程是一个能够调用一个函数或者中断服务程序的单点控制.在sysbios系统中一共有硬件中断(HWI).软件中断(SWI).任务(Task) ...

  2. TensorFlow笔记-线程和队列

    线程和队列 在使用TensorFlow进行异步计算时,队列是一种强大的机制. 为了感受一下队列,让我们来看一个简单的例子.我们先创建一个“先入先出”的队列(FIFOQueue),并将其内部所有元素初始 ...

  3. JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?

    前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事 ...

  4. python学习笔记——线程threading (二)重写run()方法和守护进程daemon()

    1 run()方法 1.1 单个线程 在threading.Thread()类中有run()方法. from time import ctime,sleep import threading # 定义 ...

  5. Python3基础笔记---线程与进程

    参考博客:Py西游攻关之多线程(threading模块) 一.并发与并行的区别 并发:交替做不同事的能力并行:同时做不同事的能力 行话解释:并发:不同代码块交替执行的性能并行:不同代码块同时执行的性能 ...

  6. ARM官方《CMSIS-RTOS教程》之线程Threads

    创建线程Creating Threads 一旦RTOS开始运行,就会有很多系统调用来管理和控制活跃的线程.默认情况下,main()函数自动被创建为第一个可运行的线程.在第一个例子里我们使用main() ...

  7. Java学习笔记 线程池使用及详解

    有点笨,参考了好几篇大佬们写的文章才整理出来的笔记.... 字面意思上解释,线程池就是装有线程的池,我们可以把要执行的多线程交给线程池来处理,和连接池的概念一样,通过维护一定数量的线程池来达到多个线程 ...

  8. 【多线程】Android多线程学习笔记——线程池

    Java线程池采用了享元设计模式,在系统中维持一定数量的线程,用于处理异步或并发需求,在平时处理异步或并发任务时被广泛使用.这里基于JDK1.8和Android28来整理一些关于线程池的知识点. 一. ...

  9. struts2学习笔记--线程安全问题小结

    在说struts2的线程安全之前,先说一下,什么是线程安全?这是一个网友讲的, 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样 ...

随机推荐

  1. 黑马程序员——C语言基础 流程控制 选择结构和循环结构

    ---恢复内容开始--- Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)流程控制 1> 顺序结构:默认的流程 ...

  2. Bpmx实施经验

    Bpmx是一个较大的平台,直接发布的话会有内存问题,经查阅一些资料,java1.5没有解决好之前版本的历史问题,所以在垃圾处理gc上有很多配置需要手动完成,之后的版本同上. Bpmx平台自带的文档中部 ...

  3. PreparedStatement

    PreparedStatement > 它是Statement接口的子接口: >强大之处: 防SQL攻击: 提高代码的可读性.可维护性: 提高效率! l 学习PreparedStateme ...

  4. C# FTP/SFTP文件传输控件FTP for .NET/.NET CF 详细介绍

    FTP for .NET将FTP客户端功能添加到您的应用程序之中..NET控件的FTP支持所有常用的FTP服务器以及代理服务器,包括可扩展的目录解析.同步以及异步操作.主动与被动模式.以VB.NET与 ...

  5. Linq 备忘录

    public class CTest { public int i { get; set; } public string j { get; set; } } 一.Range var items=En ...

  6. Object.notifyAll()

    void java.lang.Object.notifyAll() Causes all threads which are waiting on this object's monitor (by ...

  7. 网页for循环get测试

    for(var i=0;i<10000;i++) { var request = new XMLHttpRequest(); request.open("GET"," ...

  8. arch安装

    [archwiki-install]: (https://wiki.archlinux.org/index.php/Installation_guide) uefi+gpt Gummiboot #se ...

  9. 【转】C#调用DLL

    C#中如何调用动态链接库DLL(转)     每种编程语言调用DLL的方法都不尽相同,在此只对用C#调用DLL的方法进行介绍.首先,您需要了解什么是托管,什么是非托管.一般可以认为:非托管代码主要是基 ...

  10. PHP时区配置

    在PHP安装目录中找到 php.ini-development 复制创建新的副本 找到 :date.timezone = 修改为 date.timezone = PRC 并保存为php.ini PRC ...