OS线程模型
线程模型
N对1
内核线程 映射 用户进程, 用户进程里可以启多个线程1对1
内核线程和用户线程 1对1 Linux采用这种方式N对M
用户线程被抽象为更轻量的线程, 内核线程和轻量的线程对应
进程间的数据是隔离的,父子进程间存在写时拷贝, 只要明白进程间变量是隔离的即可.
管道是基于文件实现的, 内核分配页做缓冲区, 形成循环列表
有名管道也是基于文件实现.
pthread_join 是阻塞等待线程结束
信号是在软件层面对中断的模拟.
对用户空间占用较大的程序,如cache, 当发生coredump时, 我们可以通过信号的方式, 捕获出错的信号,打印出堆栈, 而不需要
core出整个用户空间. SIGSEGV 11信号 SIGABRT
本地UNIX套接字,不经过外设, 直接使用内存块拷贝
ftok 文件不能删,因为它用的是inode节点,产生key
共享内存比较高效,因为没有内存拷贝
共享内存的同步 -- 一般使用信号量,保护共享内存的数据
共享内存实现方式 -- 队列模式、页模式、哈希模式
共享内存 -- 访问使用偏移量 ,不要用指针
消息队列 -- 内核实现的--不用考虑同步和互斥
信号量 -- 同步原语
文件内存映射, 比共享内存 可靠性高, 把文件映射到进程内存空间中, 不好的地方是回写文件要消耗io, 请求量很大的时候,大量回写会导致性能很差.
文件和锁 文件锁
GNP 通用网络模型
epoll监听文件描述符的状态 利用管道基于文件实现的特性, 监听管道状态, 实现实时通知.
非递归锁 -- 重复加锁,会导致死锁
递归锁 -- 可重复加锁,需释放多次
读写锁 -- 读多写少
多线程模型 - LF 和 半同步半异步
半同步半异步 由于有队列,会引入压队列和出队列的拷贝消耗, 但是有利于框架化,解耦IO和业务逻辑.
LF 比较简单,但是IO和业务耦合.
加锁和解锁 一秒可以几十万次,锁最大的问题是锁的占用时间
能不加锁就不加锁
空间换时间 减小锁的粒度 考虑临界区
避免死锁
性能要求较高的场景下 -- 两个map存储数据,切换,形成无锁方案

多线程更适合计算频繁、通信频繁、组件化、交互式
多进程更稳定
OS线程模型的更多相关文章
- Android 线程模型
Android 线程模型 1. import android.os.Handler; import android.os.Message; public class MainActivity ext ...
- posix 线程(一):线程模型、pthread 系列函数 和 简单多线程服务器端程序
posix 线程(一):线程模型.pthread 系列函数 和 简单多线程服务器端程序 一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属 ...
- GPU的线程模型和内存模型
遇见C++ AMP:在GPU上做并行计算 Written by Allen Lee I see all the young believers, your target audience. I see ...
- 操作系统学习笔记----进程/线程模型----Coursera课程笔记
操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...
- 线程模型、pthread 系列函数 和 简单多线程服务器端程序
一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属于1:1模型. (一).N:1用户线程模型 “线程实现”建立在“进程控制”机制之上,由用 ...
- [并发并行]_[线程模型]_[Pthread线程使用模型之一管道Pipeline]
场景 1.经常在Windows, MacOSX 开发C多线程程序的时候, 经常需要和线程打交道, 如果开发人员的数量不多时, 同时掌握Win32和pthread线程 并不是容易的事情, 而且使用Win ...
- android线程 Handler Message Queue AsyncTask线程模型 线程交互 + 修改Button样式 示例 最终easy整合版
首先原谅我把文章的标题写的这么长.其实我还嫌弃它短了因为 写不下去了所以我就不写了.因为我实在不知道该怎么定义这篇文章的标题或许应该叫 "乱谈"比较合适. 这样可能还体现了 ...
- java并发笔记之java线程模型
警告⚠️:本文耗时很长,先做好心理准备 java当中的线程和操作系统的线程是什么关系? 猜想: java thread —-对应-—> OS thread Linux关于操作系统的线程控制源码: ...
- 死磕 java线程系列之线程模型
问题 (1)线程类型有哪些? (2)线程模型有哪些? (3)各语言使用的是哪种线程模型? 简介 在Java中,我们平时所说的并发编程.多线程.共享资源等概念都是与线程相关的,这里所说的线程实际上应该叫 ...
随机推荐
- 21天学通C++_Day3_Part1
今天奔跑吧兄弟来杭电了,决定不去看,宅在科协继续啃(反正去了也看不到咯),继续继续,今天白天没课,希望可以更两个. 0.C风格字符串 在数组中间把某个字符替换成‘\0’并不会改变数组的长度,但是显示时 ...
- 2017 山东二轮集训 Day7 国王
2017 山东二轮集训 Day7 国王 题目大意 给定一棵树,每个点有黑白两种颜色,定义一条简单路径合法当且仅当路径上所有点黑色与白色数量相等,求有多少非空区间 \([L,R]\) ,使得所有编号 \ ...
- freemarker 常见问题
<#setting date_format="yyyy-MM-dd"> ..设置时间格式然后获取从后台获取值${s.createTime?date}这样就能正常显示了 ...
- bzoj 1226 学校食堂Dining
Written with StackEdit. Description 小\(F\) 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜 ...
- 关于JS浅拷贝和深拷贝
在 JS 中有一些基本类型像是Number.String.Boolean,而对象就是像这样的东西{ name: 'Larry', skill: 'Node.js' },对象跟基本类型最大的不同就在于他 ...
- 16.Selenium+Python关于句柄的小Demo
前言:有些链接点击之后,会重新打开一个窗口,对于这种情况,就要切换窗口了,获得窗口的唯一标识是用句柄(handle) 代码如下所示: from selenium import webdriver dr ...
- STM32从boot跳转到app失败
现象:在每次boot执行完跳转到APP时,都会跑飞 原因:在boot中使用到了USART和TIM,boot执行完没有关闭总中断 方法:在boot执行完跳转之前关闭中断,__disable_irq() ...
- shell 脚本基础知识详细介绍(二)
SimonSu 博客 评论墙 读者墙 链接 关于 linux中的sh脚本语法 玩linux都知道sh脚本的方便,但如何编写sh脚本却是像我这样的新手和菜鸟的难题.能不能编写得出来是一回事,了不了解又是 ...
- Unable to resolve target 'android-21'
本文转载自:http://blog.csdn.net/love_javc_you/article/details/37728355 重新装完Ecplise+ATD+Android SDK 在Ecpli ...
- 安装jenkins 的时候 记录默认密码文件为空的情况
1.把文件的权限改成 chmod 777 .jenkins/secrets/initialAdminPassword 然后再使用编辑器打开,密码就出来的 密码文件的地址 /var/root/.hud ...