线程模型

  1. N对1
    内核线程 映射 用户进程, 用户进程里可以启多个线程

  2. 1对1
    内核线程和用户线程 1对1 Linux采用这种方式

  3. N对M
    用户线程被抽象为更轻量的线程, 内核线程和轻量的线程对应

进程间的数据是隔离的,父子进程间存在写时拷贝, 只要明白进程间变量是隔离的即可.

管道是基于文件实现的, 内核分配页做缓冲区, 形成循环列表
有名管道也是基于文件实现.

pthread_join 是阻塞等待线程结束

信号是在软件层面对中断的模拟.

对用户空间占用较大的程序,如cache, 当发生coredump时, 我们可以通过信号的方式, 捕获出错的信号,打印出堆栈, 而不需要
core出整个用户空间. SIGSEGV 11信号 SIGABRT

本地UNIX套接字,不经过外设, 直接使用内存块拷贝

ftok 文件不能删,因为它用的是inode节点,产生key

共享内存比较高效,因为没有内存拷贝

共享内存的同步 -- 一般使用信号量,保护共享内存的数据

共享内存实现方式 -- 队列模式、页模式、哈希模式

共享内存 -- 访问使用偏移量 ,不要用指针

消息队列 -- 内核实现的--不用考虑同步和互斥

信号量 -- 同步原语

文件内存映射, 比共享内存 可靠性高, 把文件映射到进程内存空间中, 不好的地方是回写文件要消耗io, 请求量很大的时候,大量回写会导致性能很差.

文件和锁 文件锁

GNP 通用网络模型
epoll监听文件描述符的状态 利用管道基于文件实现的特性, 监听管道状态, 实现实时通知.

非递归锁 -- 重复加锁,会导致死锁
递归锁 -- 可重复加锁,需释放多次
读写锁 -- 读多写少

多线程模型 - LF 和 半同步半异步
半同步半异步 由于有队列,会引入压队列和出队列的拷贝消耗, 但是有利于框架化,解耦IO和业务逻辑.
LF 比较简单,但是IO和业务耦合.
加锁和解锁 一秒可以几十万次,锁最大的问题是锁的占用时间
能不加锁就不加锁
空间换时间 减小锁的粒度 考虑临界区
避免死锁
性能要求较高的场景下 -- 两个map存储数据,切换,形成无锁方案

多线程更适合计算频繁、通信频繁、组件化、交互式
多进程更稳定

OS线程模型的更多相关文章

  1. Android 线程模型

    Android 线程模型 1. import android.os.Handler;  import android.os.Message; public class MainActivity ext ...

  2. posix 线程(一):线程模型、pthread 系列函数 和 简单多线程服务器端程序

    posix 线程(一):线程模型.pthread 系列函数 和 简单多线程服务器端程序 一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属 ...

  3. GPU的线程模型和内存模型

    遇见C++ AMP:在GPU上做并行计算 Written by Allen Lee I see all the young believers, your target audience. I see ...

  4. 操作系统学习笔记----进程/线程模型----Coursera课程笔记

    操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...

  5. 线程模型、pthread 系列函数 和 简单多线程服务器端程序

    一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属于1:1模型. (一).N:1用户线程模型 “线程实现”建立在“进程控制”机制之上,由用 ...

  6. [并发并行]_[线程模型]_[Pthread线程使用模型之一管道Pipeline]

    场景 1.经常在Windows, MacOSX 开发C多线程程序的时候, 经常需要和线程打交道, 如果开发人员的数量不多时, 同时掌握Win32和pthread线程 并不是容易的事情, 而且使用Win ...

  7. android线程 Handler Message Queue AsyncTask线程模型 线程交互 + 修改Button样式 示例 最终easy整合版

     首先原谅我把文章的标题写的这么长.其实我还嫌弃它短了因为 写不下去了所以我就不写了.因为我实在不知道该怎么定义这篇文章的标题或许应该叫 "乱谈"比较合适. 这样可能还体现了 ...

  8. java并发笔记之java线程模型

    警告⚠️:本文耗时很长,先做好心理准备 java当中的线程和操作系统的线程是什么关系? 猜想: java thread —-对应-—> OS thread Linux关于操作系统的线程控制源码: ...

  9. 死磕 java线程系列之线程模型

    问题 (1)线程类型有哪些? (2)线程模型有哪些? (3)各语言使用的是哪种线程模型? 简介 在Java中,我们平时所说的并发编程.多线程.共享资源等概念都是与线程相关的,这里所说的线程实际上应该叫 ...

随机推荐

  1. [QT] Tab键切换焦点顺序

    在Qt Designer 中点击“编辑Tab顺序“按钮进入编辑Tab顺序模式,如下图: 之后界面会变成这样: 随处点击右键即可弹出菜单,选择  "制表符顺序列表..." 出现 剩下 ...

  2. php 中 用curl 发送 https 请求

    在 php.ini 中修改配置选项 curl.cainfo = "D:\phpStudy\php\php-5.6.27-nts\pert\cacert.pem" 其中 cacert ...

  3. Hibernate之mappedBy【必读】

    [http://www.cnblogs.com/redcoatjk/p/4236445.html] 一.mappedBy 单向关系不需要设置该属性,双向关系必须设置,避免双方都建立外键字段 数据库中1 ...

  4. 模糊聚类算法(FCM)

    伴随着模糊集理论的形成.发展和深化,RusPini率先提出模糊划分的概念.以此为起点和基础,模糊聚类理论和方法迅速蓬勃发展起来.针对不同的应用,人们提出了很多模糊聚类算法,比较典型的有基于相似性关系和 ...

  5. hibernate 多对多(many-to-many)

    多对多(many-to-many):在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型:hibernate会为我们创建中间关联表,转换成两个一对多. 1. E- ...

  6. 使用Volley框架中的ImageLoader来异步的加载图片

    Volley框架在请求网络图片方面也做了很多工作,提供了好几种方法.本文介绍使用ImageLoader来进行网络图片的加载.ImageLoader的内部使用ImageRequest来实现,它的构造器可 ...

  7. Java实现三种常用的查找算法(顺序查查找,折半查找,二叉排序树查找)

    public class Search { public class BiTreeNode{ int m_nValue; BiTreeNode m_pLeft; BiTreeNode m_pRight ...

  8. NOIP2013DAY1题解

    T1转圈游戏 十月のsecret 题解:快速幂 代码: #include<iostream> #include<cstring> #include<cstdio> ...

  9. 十八、python沉淀之路--生成器

    一.生成器 生成器总结:语法上和函数类似:生成器函数和常规函数几乎是一样的.他们都是使用def语句进行定义,差别在于生成器使用yield语句返回一个值,而常规函数使用return语句返回一个值.自动实 ...

  10. dubbo-demo安装运行指南

    步骤步骤:1.安装JDK:2.安装Tomcat:3.安装Zookeeper:4.安装Dubbo: 修改Consumer配置文件