现在位置: 首页 > 多线程编程
2020-04-28 06:36 工业·编程 ⁄ 共 1796字 暂无评论
无锁技术目前使用的非常多,基本上新的内存分配库的核心都是使用无锁技术实现的,设计思路非常简单,就是减少并发冲突, 提升效率。 具体来说,一个是使用使用thread_local, 那么每个线程有自己独立的操作对象,那么这种存取方式就是非常高效的,完全没有锁, 代码实现非常简单,定义一下thread local就可以用了。 其次,就是per CPU的方式,就是说数据对象按CPU分组,那么这种方式的锁冲突也是非常小(例如执行中线程被切换情...
阅读全文
1.计算密集型线程池 cpu使用率较高(也就是一些复杂运算,逻辑处理),所以线程数一般只需要cpu核数的线程就可以了。 这一类型的在开发中多出现的一些业务复杂计算和逻辑处理过程中。 数量一般为 N+1个   N为CPU核心数 2.IO密集型 cpu使用率较低,程序中会存在大量I/O操作占据时间,导致线程空余时间出来,所以通常就需要开cpu核数的两倍的线程, 当线程进行I/O操作cpu空暇时启用其他线程继续使用cpu,提高cpu使用率...
阅读全文
2019-05-17 05:29 工业·编程 ⁄ 共 1619字 暂无评论
1.含义 一个类只能实例化出一个对象 2.单例模式实现的两种方式 饿汉模式 我们在程序运行之初就将对象创建好,就是说不管你将来用不用,程序启动时就创建一个唯一的实例对象。是以空间换时间的做法。这样程序运行中想要调用这个实例时都可以直接使用。举个例子:就像是一个人在吃完饭后立刻就去将碗洗了,这样以便于在下一次开饭的时候可以马上吃到饭。 实现原理: 为了在运行前就实例化好对象,并且不允许其他方式来实例化对象...
阅读全文
在linux多线程环境下对同一变量进行读写时,经常会遇到读写的原子性问题,即会出现竞争条件。为了解决多个线程对同一变量访问时的竞争条件问题,操作系统层面提供了锁、信号量、条件变量等几种线程同步机制。如果对变量的每次访问都使用上述机制,由于系统调用会陷入内核空间,需要频繁的进行上下文切换,这就导致了程序的时间开销比较大。 自然的,我们就想到,在多线程环境中,在某些情况下是否能减少甚至避免使用系统调用?...
阅读全文
2017-03-21 13:59 工业·编程 ⁄ 共 2693字 评论 1 条
    协程是在线程之上由“用户”构建的并发单元,对OS来说无感知,协程的切换由用户自己管理和调度。(这里的用户是相较于内核而言的,一些通用库这里也理解为用户) C/C++怎么实现协程     作为一个C++后台开发,我知道像go, lua之类的语言在语言层面上提供了协程的api,但是我比较关心C++下要怎么实现这一点,下面的讨论都是从C/C++程序员的角度来看协程的问题的。 boost和腾讯都推出了相关的库...
阅读全文
读写锁是把共享资源的访问分为读者和写者。读者能共享访问,写者能进行写操作.很明显这个比简单的互斥访问要好很多。提高性能效率我的理解是在设计上遵循以下原则 1.锁的深度 范围 2.多线程对共享资源访问的频率 次数 3.让访问尽量可控。 读写锁我觉得就是让这种访问可控. 一、读写锁的特征   1.当读写锁是写加锁状态时, 在这个锁被解锁之前, 所有试图对这个锁加锁的线程都会被阻塞.   2.当读写锁在读加锁状态时, ...
阅读全文
2016-07-18 22:53 工业·编程 ⁄ 共 917字 暂无评论
互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象。当获取锁操作失败时,线程会进入睡眠,等待锁释放时被唤醒 自旋锁:spinlock,在任何时刻同样只能有一个线程访问对象。但是当获取锁操作失败时,不会进入睡眠,而是会在原地自旋,直到锁被释放。这样节省了线程从睡眠状态到被唤醒期间的消耗,在加锁时间短暂的环境下会极大的提高效率。但如果加锁时间过长,则会非常浪费CPU资源 读写锁:rwlock,区分读和写,...
阅读全文
文章目录 一、死锁的定义 三、如何避免死锁 一、死锁的定义 多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。 下面我们通过一些实例来说明死锁现象。 先看生活中的一个实例,2个人一起吃饭但是只有一...
阅读全文
2015-11-09 16:55 工业·编程 ⁄ 共 10498字 暂无评论
    上篇文章《多线程断点续传研究(1) 》写完,由于整体思路是正确的,但是没有真正形成多线程下载,所以对本身的代码进行关键点的检查,尤其在一些操作web请求的地方,看看是否有什么问题,最后发现显示的关闭HttpWebResponse对象,能稍微有所改进。 那么修改后的类,大致代码如下: //--------------------------- Download File class --------------------------------------- //--------------------------...
阅读全文
2015-11-08 14:10 工业·编程 ⁄ 共 13419字 评论 1 条
知道通过HttpWebRequest就可以进行多线程断点下载,是我不用考虑从Socket写起。 对于一个多线程断点续传程序,我大致认为只要考虑如下几点问题就行了。 1. 下载数据可以从给定位置进行; 2. 可以进行分块下载; 3. 记录下载位置,以供下次重新下载的时候使用。 通过对原文的阅读来看,发现以上问题的前两个已经实现。这样会使需要附加的操作会更简单些。 为了能记录每个线程下载的位置,我借用了最简单的方式,就是xml方式。...
阅读全文