随笔分类 -  编程技术

摘要:1 #pragma once 2 3 //可控长度、pop、push的启停 线程安全队列 4 5 #include <atomic> 6 #include <condition_variable> 7 //#include <functional> 8 #include <memory> 9 #in 阅读全文
posted @ 2022-03-06 11:44 秋雨声 阅读(165) 评论(0) 推荐(0)
摘要:【前言】go语言的并发机制以及它所使用的CSP并发模型 一、CSP并发模型 CSP模型是上个世纪七十年代提出的,用于描述两个独立的并发实体通过共享的通讯 channel(管道)进行通信的并发模型。 CSP中channel是第一类对象,它不关注发送消息的实体,而关注与发送消息时使用的channel。 阅读全文
posted @ 2018-11-29 17:04 秋雨声 阅读(776) 评论(0) 推荐(0)
摘要:【前言】从全局来讲,当键入一个url时,肯定是需要从服务器请求某个页面或某条数据然后显示到用户自己的电脑屏幕上。这个过程中其实包括:DNS对url域名的解析(在url中解析出服务器所在的IP地址,有的url也包括端口),计算机网络中的五层协议层传输,代理服务器的响应、缓存或者负载均衡、最终html/ 阅读全文
posted @ 2018-08-27 17:42 秋雨声 阅读(1621) 评论(0) 推荐(0)
摘要:【前言】对这两个理解还是不够深刻,写一篇博客来记录一下。 首先关于共享内存的链接:共享内存。里面包含了创建共享内存区域的函数,以及两个进程怎么挂载共享内存通信,分离、释放共享内存。 共享内存的好处就是效率高,不需要太多次的进行数据的copy。可以直接进行读写内存。所以,相对来说在IPC进程间通信三大 阅读全文
posted @ 2018-08-14 19:22 秋雨声 阅读(12569) 评论(0) 推荐(0)
摘要:【前言】虽然现在没有接触过大型项目,但是工作了会注重性能。学习一下,应该能更好更快的理解别人写的经典优化的代码。结合CSAPP和自己的理解,总结一下。 一、程序优化综述 1、高效程序的特点 (1)适当的算法和数据结构。方法和数据的组织形式无疑是最关键的,是优化的基础; (2)代码能够被编译器转化成高 阅读全文
posted @ 2018-06-13 23:19 秋雨声 阅读(511) 评论(0) 推荐(0)
摘要:【前言】在写程序时,虽然一直这么用,有点疑惑为甚么引入了头文件.h还要在加上using namespace std?例如: 下面就介绍一下,为什么在引用了iostream头文件的情况下,想使用cout,还要加上std命名空间。 一、std和stl的关系 stl是标准模板库,是标准库的子集。主要是容器 阅读全文
posted @ 2018-06-11 17:41 秋雨声 阅读(6254) 评论(0) 推荐(0)
摘要:我们在调试时,有时候会用到这两个语句。 1、显而易见,第一个是一个循环函数,占cpu、占内存; 2、system("pause")是一个系统调用,占内存,不占cpu;这个开销还是有的,有一个暂停当前进程,启动shell来运行pause命令,等待输入。若有了输入还要回收shell. 另一个问题,因为p 阅读全文
posted @ 2018-06-07 09:34 秋雨声 阅读(487) 评论(0) 推荐(0)
摘要:我们通过创建 std::thread 对象来对线程进行管理。在一些情况下,这种方式不可行,因为需要在线程的整个生命周期中对其进行管理,并根据硬件来确定线程数量,等等。另一种情况是,当使用多线程来解决某个问题时,在某个条件达成的时候,可以提前结束。 所以从管理线程和任务的机制,两个角度介绍线程池。 一 阅读全文
posted @ 2018-06-04 17:35 秋雨声 阅读(525) 评论(0) 推荐(0)
摘要:本章主要内容 线程间划分数据的技术 影响并发代码性能的因素 性能因素是如何影响数据结构的设计 多线程代码中的异常安全 可扩展性 并行算法的实现 前面主要介绍了并发的数据结构,现在从高层(但也是基本的)考虑,如何使用线程,哪些代码应该在哪些线程上执行;以及,这将如何影响代码的清晰度,并从底层细节上了解 阅读全文
posted @ 2018-06-04 10:54 秋雨声 阅读(700) 评论(0) 推荐(0)
摘要:主要内容: 并发数据结构设计的意义 指导如何设计 实现为并发设计的数据结构 如果一种数据结构可以被多个线程所访问,其要不就是绝对不变的(其值不会发生变化,并且不需同步),要不程序就要对数据结构进行正确的设计,以确保其能在多线程环境下能够(正确的)同步。一种选择是使用独立的互斥量,其可以锁住需要保护的 阅读全文
posted @ 2018-06-04 08:50 秋雨声 阅读(442) 评论(0) 推荐(0)
摘要:一、主要涉及 在上一章中,我们看到各种在线程间保护共享数据的方法。当你不仅想要保护数据,还想对单独的线程进行同步。例如,在第一个线程完成前,可能需要等待另一个线程执行完成。 C++ 标准库提供了一些工具可用于同步操作,形式上表现为条件变量(condition variables)和期望(future 阅读全文
posted @ 2018-06-03 15:32 秋雨声 阅读(169) 评论(0) 推荐(0)
摘要:一、共享内存带来的问题 读时没问题,写时会有竞争问题。 二、解决方法 1、最简单的办法就是对数据结构采用某种保护机制,确保只有进行修改的线程才能看到不变量被破坏时的中间状态。从其他访问线程的角度来看,修改不是已经完成了,就是还没开始。 2、另一个选择是对数据结构和不变量的设计进行修改,修改完的结构必 阅读全文
posted @ 2018-06-02 23:33 秋雨声 阅读(663) 评论(0) 推荐(0)
摘要:一、启动线程 注意t是创建的线程,do_something是函数对象,不要传入函数。提供的函数对象会复制到新线程的存储空间当中,函数对象的执行和调用都在线程的内存空间中进行。 join(),detach() 二、线程传参 线程调用传参 注意线程初始化不会对舛讹的参数隐式转换,需要显式转换。 三、转移 阅读全文
posted @ 2018-06-02 19:08 秋雨声 阅读(169) 评论(0) 推荐(0)
摘要:一 、多进程并发和多线程并发 多进程并发有进程间通信机制,更加安全。第一个缺点:进程间通信为避免一个进程修改另一个进程,比如读时共享写时复制使得花销更大;第二个缺点:需要启动进程,还要系统内核来管理进程,因为C++ 没有对进程提供任何封装。 但是进程相对独立,可以分布式运行在独立的机器上,算是一个优 阅读全文
posted @ 2018-06-02 15:39 秋雨声 阅读(216) 评论(0) 推荐(0)
摘要:一、问题提出 单处理器上只能用串行算法,所谓的并行也是时间片轮转,没有真正达到并发的意义。上下文切换还会有时间消耗,但是我们不可能为每一个任务都分配一个cpu,是一种不得已而为之的并发。前面是软件并发,但是多处理器时代,允许多条指令在处理器上并发执行,讨论硬件并发。并发有多进程并发和多线程并发,二者 阅读全文
posted @ 2018-06-01 10:13 秋雨声 阅读(475) 评论(0) 推荐(0)