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中,我们平时所说的并发编程.多线程.共享资源等概念都是与线程相关的,这里所说的线程实际上应该叫 ...
随机推荐
- bzoj 2131 免费的馅饼
Written with StackEdit. Description Input 第一行是用空格隔开的二个正整数,分别给出了舞台的宽度\(W\)(\(1\)到\(10^8\)之间)和馅饼的个数\(n ...
- Bellman-Ford算法——解决负权边
Dijkstra算法虽然好,但是它不能解决带有负权边(边的权值为负数)的图. 接下来学习一种无论在思想上还是在代码实现上都可以称为完美的最短路径算法:Bellman-Ford算法. Bellman-F ...
- Weex入门篇——Mac 安装Weex
相关文档:http://blog.csdn.net/jasonblog/article/details/51863173 前言 相比较于React Native的“Learn once, write ...
- niosii 改变软核之后重新编译方法
操作系统:Win7 64 bit 开发环境:Quartus II 12.0 (64-Bit) + Nios II 12.0 Software Build Tools for Eclipse 使用Qu ...
- 监听文本框输入oninput和onpropertychange事件
前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onkeydow ...
- spring切面配置,代理用jdk和cglib的区别
jdk的动态代理大家应该都听说过,条件是必须要有接口:cglib不要求接口,那么它是怎么实现切面的呢?很简单,通过继承,它动态的创建出一个目标类的子类,复写父类的方法,由此实现对方法的增强.看例子: ...
- mongo数据排序和分页显示
数据排序 使用sort()1 升序-1 降序自然排序 数据插入的顺序$natural db.stu.drop(); db.stu.insert({,,"address":" ...
- 配置和启动脚本(bash shell学习01)
bash是 Bourne Again Shell简称 ,从unix系统的sh发展而来 查看当前shellecho $SHELL查看系统支持的shellcat /etc/shells cd /binls ...
- java代码逆序输出再连篇
总结:思维方式关键 package com.dfd; import java.util.Scanner; //逆序输出数字 public class fdad { public static void ...
- 关系数据库元组关系演算语言ALPHA
关系演算 :以数理逻辑中的谓词演算为基础 按谓词变元不同分类 1.元组关系演算:以元组变量作为谓词变元的基本对象元组关系演算语言ALPHA2.域关系演算:以域变量作为谓词变元的基本对象域关系演算语言Q ...