线程的理解和并发解决方案

一,并发和并行的区别

并行:同时做某些事,可以互不干扰的同一时刻做几件事(不一定同时)。
并行:同一时刻做某些事,但是强调同一时刻做了几件事。

并发的解决方案

1,队列,缓冲区
假设只有一个窗口,陆续进入食堂打饭,排队的人就是队列,先进先出,解决资源使用问题。排成的队列,就是缓冲区

2,争抢

只开一个窗户,可能没有秩序,谁的拳头大是吃饭,拳头大的抢到窗口,打完饭离开,后面的继续争抢再到下一个拳头大的。不管怎么争抢,总会只有一个人占据窗口,这个时候这个窗口只为这个人服务,不再为其他人提供服务,这就是一种锁机制。
争抢是一种高并发的解放方案,但是,不好,因为有人比较弱小,长时间抵不过拳头大的。

3,预处理

如果排长队的原因,是由于每个人打饭等候时间过长,比如要吃的菜没有,要现炒,没打着饭菜不走,锁定占着窗口。
可以提前统计大多数人爱吃的饭菜,最爱吃的80%的饭菜提前做好,保证供应,20%的冷门菜,现做。这样可以大大的减少排队打饭的时间,这种提前加载用户需要的思路,预处理思想,缓存常用。

4,并行

很多人来打饭,一个窗口搞不定,开多个窗户排多个队列,并行打饭。但是多开窗口,就意味着更多打饭的师傅守在窗口提供服务,造成成本的上升。日常可以通过更多服务器,或多开进程,线程实现并行处理,来解决并发问题,注意这些是水平扩展思想。

5,提速

提高单个窗口的打饭速度,也是解决高并发的方式。打饭人员提高工作技能,打饭人员换成手脚麻利的年轻人,或者单个窗口配置更多的服务人员,比如上菜,打饭的由不同的人来做,甚至为每某几个菜配置一个服务人员,都是提速的方法。
提高单个CPU性能,或单个服务器安装更多的CPU。这是一种垂直扩展思想。

6,消息中间件

地铁站外的走廊曲折,缓冲人流,进去之后在多口过安检进站。常见的消息中间件有RabbitMQ,ActiveMQ,RocketMQ,kafka等。
当然还有其他的解决方案比如分布式之类的,但是已经列举了常用的解决方案,不同的并发场景比如秒杀服务,访问量大的网站等是具有不同的策略的,而策略可能就是多种方式的优化组合。
例如食堂多开,开分店(多地),也可以把食堂修到距离员工最近的地方(就近)等。

二,进程和线程

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位,一个程序的执行实例就是一个进程。
进程(process),是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
线程(thread),有时候也被称为轻量级进程(LightWeight Process,LWP),是程序执行的最小单元。一个标准的线程由线程ID,当前指令指针,寄存器集合和堆栈组成。
进程和线程区别:
地址空间:同一个进程的线程共享本线程的地址空间,而进城之间则是独立的地址空间。
资源拥有:同一个进程内的线程共享本进程的资源如内存,I/O,CPU等,但是进程之间是独立的。
一个进程崩溃后,在保护模式下不会对其他进程造成影响,但是一个线程崩溃整个进程都会死掉。多以进程比线程更加健壮。
进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要优于进程。

线程的状态
状态 含义
就绪(Ready ) 线程能够运行,但在等待被调度。可能线程刚刚被创建,或刚刚从阻塞中恢复,或者被其它线程抢占
运行(Runnning) 线程正在运行
阻塞(Blocked) 线程等待外部事件发生而无法运行,如等待I/O操作
终止(Terminated) 线程完成,或退出,或被取消

原文地址:https://blog.51cto.com/berniem2m/2372602

时间: 2024-08-01 16:40:50

线程的理解和并发解决方案的相关文章

手把手让你实现开源企业级web高并发解决方案(lvs+heartbeat+varnish+nginx+eAccelerator+memcached)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeze.blog.51cto.com/1846439/677348 此文凝聚笔者不少心血请尊重笔者劳动,转载请注明出处.违法直接人肉出电话 写大街上. http://freeze.blog.51cto.com/个人小站刚上线 http://www.linuxwind.com 有问题还可以来QQ群89342115交流. 今儿网友朋友说:freeze黔驴技穷了,博客也不更新,也

淘宝下单高并发解决方案(转)

淘宝下单高并发解决方案 周末参加了@淘宝技术嘉年华 主办的技术沙龙, 感觉收获颇丰,非常感谢淘宝人的分享.这里我把淘宝下单高并发解决方案的个人理解分享一下.我不是淘宝技术人员,本文只是写自己的理解,所以肯定是会有一些出入的. 在session中牧劳为我们介绍了淘宝下单部分的技术方案变迁,我不介绍变迁,而只对现有系统做介绍. 要优化下单,提高下单的TPS (Transaction per second),我们首先要做的是对下单的逻辑剥离,只保留核心部分,而把附加功能剔除出去.比如说下单要考虑库存量

[转]淘宝下单高并发解决方案

周末参加了@淘宝技术嘉年华 主办的技术沙龙, 感觉收获颇丰,非常感谢淘宝人的分享.这里我把淘宝下单高并发解决方案的个人理解分享一下.我不是淘宝技术人员,本文只是写自己的理解,所以肯定是会有一些出入的. 在session中牧劳为我们介绍了淘宝下单部分的技术方案变迁,我不介绍变迁,而只对现有系统做介绍. 要优化下单,提高下单的TPS (Transaction per second),我们首先要做的是对下单的逻辑剥离,只保留核心部分,而把附加功能剔除出去.比如说下单要考虑库存量,考虑发短信,要给卖家发

用 Python 理解 Web 并发模型

用 Python 理解 Web 并发模型 http://www.jianshu.com/users/1b1fde012122/latest_articles 来源:MountainKing 链接:http://www.jianshu.com/p/80feb3bf5c70# 前言 虽然异步是我们急需掌握的高阶技术,但是不积跬步无以至千里,同步技术的学习是不能省略的.今天这篇文章主要用Python来介绍Web并发模型,直观地展现同步技术的缺陷以及异步好在哪里. 最简单的并发 import socke

淘宝下单高并发解决方案

这里我把淘宝下单高并发解决方案的个人理解分享一下.我不是淘宝技术人员,本文只是写自己的理解,所以肯定是会有一些出入的. 在session中牧劳为我们介绍了淘宝下单部分的技术方案变迁,我不介绍变迁,而只对现有系统做介绍. 要优化下单,提高下单的TPS (Transaction per second),我们首先要做的是对下单的逻辑剥离,只保留核心部分,而把附加功能剔除出去.比如说下单要考虑库存量,考虑发短信,要给卖家发旺旺消息通 知,要对订单做统计,要做销售额统计等等,这些功能是必要的,但是也是附加

PHP面试(二):程序设计、框架基础知识、算法与数据结构、高并发解决方案类

一.程序设计 1.设计功能系统--数据表设计.数据表创建语句.连接数据库的方式.编码能力 二.框架基础知识 1.MVC框架基本原理--原理.常见框架.单一入口的工作原理.模板引擎的理解 2.常见框架的特性--PHP框架的差异和优缺点 三.算法与数据结构 1.常见算法--算法的概念.时间复杂度和空间复杂度.常见排序算法.常见查找算法 2. 3. 4. 四.高并发解决方案 1. 2. 原文地址:https://www.cnblogs.com/darklights/p/9275751.html

长文慎入-探索Java并发编程与高并发解决方案

所有示例代码,请见/下载于https://github.com/Wasabi1234/concurrency #1 基本概念##1.1 并发同时拥有两个或者多个线程,如果程序在单核处理器上运行多个线程将交替地换入或者换出内存,这些线程是同时"存在"的,每个线程都处于执行过程中的某个状态,如果运行在多核处理器上,此时,程序中的每个线程都将分配到一个处理器核上,因此可以同时运行.##1.2 高并发( High Concurrency) 互联网分布式系统架构设计中必须考虑的因素之一,通常是指

【C/C++多线程编程之五】pthread线程深入理解

多线程编程之pthread线程深入理解  Pthread是 POSIX threads 的简称,是POSIX的线程标准. 前几篇博客已经能给你初步的多线程概念.在进一步学习线程同步等多线程核心知识之前,须要对多线程深入的理解.非常多人忽略或者回避这部分内容,直接的问题是学习者无法把握多线程编程的内在原理,理解的层次太浅.           1.进程资源:                      进程资源有存储资源与其它资源.其它资源包括环境变量.地址,文件等.存储资源.进程的内存分配,博客[

161219、大型网站应用之海量数据和高并发解决方案总结一二

一.网站应用背景 开发一个网站的应用程序,当用户规模比较小的时候,使用简单的:一台应用服务器+一台数据库服务器+一台文件服务器,这样的话完全可以解决一部分问题,也可以通过堆硬件的方式来提高网站应用的访问性能,当然,也要考虑成本的问题. 当问题的规模在经济条件下通过堆硬件的方式解决不了的时候,我们应该通过其他的思路去解决问题,互联网发展至今,已经提供了很多成熟的解决方案,但并不是都具有适用性,你把淘宝的技术全部都搬过来也不一定达到现在淘宝的水平,道理很简单. 当然,很多文章都在强调,一个网站的发展