线程: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. MFC-01-Chapter01:Hello,MFC---1.3 第一个MFC程序(01)

    #include <afxwin.h> class CMyApp : public CWinApp { public: virtual BOOL InitInstance(); }; cl ...

  2. nginx rewrite

    # nginx rewrite rule #Main menu rules.rewrite ^(.*?)/index.html$ $1/index.php?r=site/index break;rew ...

  3. kmod编译找不到函数kmod_log

    编译报错: /usr/bin/ld: Warning: gc-sections option ignored libkmod/.libs/libkmod-util.a(libkmod-util.o): ...

  4. Win Form程序线程点点

    消息循环 Win32窗体程序基于消息驱动的,程序的模型就是一个用户触发事件消息->系统分发事件消息->程序处理事件的循环过程. .NET Win Form程序对消息循环进行了封装,可以看到 ...

  5. goldengate for big data 12.2.0.1.1新增功能

    新格式支持:包括Avro OCF和HDFS顺序文件,OGG现在支持将数据写入Avro对象容器(Object container format)和HDFS顺序文件 支持Hadoop平台元数据或DDL更新 ...

  6. 《java异常的一些总结》

    关于Java中异常的一些总结: 3 有些时候,程序在try块里打开了一些物理资源(例如数据库连接,网络连接. 4 和磁盘文件等),这些物理资源都必须显示回收. 5 6 注意:Java的垃圾回收机制不会 ...

  7. Node连接MySQL

    http://blog.fens.me/nodejs-mysql-intro/ http://czpae86.iteye.com/blog/1636302 http://www.cnblogs.com ...

  8. yii开发一个web程序的基本流程

    1. 创建目录结构.在前面的章节Creating First Yii Application写的yiic工具可以帮助我们快速完成这步. 2. 配置 application.就是修改applicatio ...

  9. 预装win8的系统换win7需要做的bios设置

    https://zhidao.baidu.com/question/873669708066476212.html (一)联想G50-70由于预装的是WIN8位系统,哪么改装WIN7 64位的方法如下 ...

  10. java集合类的学习(一)

    为何要用集合类:可以储存不同类型的数据,可以进行动态的删除和修改,不用考虑数组越界的问题. 软件开发常用的集合类:Vector,ArrayList,Stack,HashMap,Hashtable. 3 ...