Linux多线程服务端编程的笔记(15)

>我来写笔记

按有用程度 按页码先后 最新笔记

  • 杰良

    杰良 (继往开来)

    1、执行顺序的不确定性。 1.1、11 个最基本的 Pthreads 函数: 1.2、2 个:线程的创建和等待结束。 1.3、4 个:mutex 的创建、销毁、加锁、解锁。 1.4、5 个:条件变量的创建、销毁、等待、通知、广播。 2、尽管单个函数是线程安全的,但两个或多个函数放到一起就不再安全了。 3、pthread_t 并不适合用作程序中对线程的标识符。在 Linux 上,使用 gettid(2) 系统调用的返回值作为线程 id。 4、线程创...

    2015-02-27 20:32   1人喜欢

  • 杰良

    杰良 (继往开来)

    1、并发编程基本模型:message passing、shared memory。 2、线程同步的四项原则 2.1、尽量最低限度地共享对象,减少需要同步的场合。如果确实需要,优先考虑共享 immutable 对象。 2.2、使用高级的并发编程构件。 2.3、不得已必须使用底层同步原语(primitives)时,只用非递归的互斥器和条件变量,慎用读写锁,不要用信号量。 2.4、除了使用 atomic 整数之外,不自己编写 lock-free 代码,也不要用“内核...

    2015-01-25 17:23   1人喜欢

  • 杰良

    杰良 (继往开来)

    1、简单的 TCP 示例 1.1、discard,daytime,time,echo,chargen。 2、文件传输,利用 onWriteComplete() 实现分段传输,做到不必一次全部读入内存。 3、TCP haft-close 问题。 4、TCP 消息分包方法: 4.1、消息长度固定。 4.2、使用特殊字符或字符串作为消息边界。 4.3、在每条消息头部加一个长度字段。 4.4、利用消息本身的格式分包,例如 XML、JSON。 5、muduo Buffer 类的设计与使用 ...

    2015-05-01 18:45

  • 鱼肚

    鱼肚 (好想长得胖嘟嘟)

    析构所在的线程 对象的析构是同步的,当最后一个指向x的shared_ptr离开其作用域的时候,x会同时在同一个线程析构。这个线程不一定是对象诞生的线程。 如作者所述,这个特性是双刃剑,用得不好的话在关键线程里释放内存会拖慢关键线程,用得好的话,关键线程里地释放可以转移到一个专用的析构线程中去。

    2015-04-26 11:32

  • 鱼肚

    鱼肚 (好想长得胖嘟嘟)

    析构动作在创建时被捕获 这是一个非常有用的特性,这意味着: 虚析构不再是必需的 shared_ptr<void>可以持有任何对象,而且能够安全地释放。 shared_ptr对象可以安全地跨越模块边界,比如从dll里返回,而不会造成从模块A分配的内存在模块B里被释放这种错误。 二进制兼容性,即便Foo对象的大小变了,那么旧的客户代码依然可以使用新的动态库,而无需重新编译。前提是Foo的头文件中不会访问对象的成员的...

    2015-04-26 11:18

  • 杰良

    杰良 (继往开来)

    1、分布式系统的本质困难 - partial failure。 1.1、分布式系统与单机的最大区别,是我们无法及时得知另外一台机器的死活,也无法把机器崩溃和网络故障区分开来。 1.2、分布式系统的困难还在于时间与事件顺序违反直觉。因为消息传递有延时而且不固定,这就好像狭义相对论的效果,每个本地观察者有自己的时钟和时间顺序。 1.2消息传输的延迟不能通过发送方和接收方的时间戳的差值算出来。即使使用 NTP 对时,精度还..

    2015-04-13 22:58

  • 杰良

    杰良 (继往开来)

    1、muduo 是基于 Reactor 模式的网络库,其核心是个事件循环 EventLoop,用于响应计时器和 IO 事件。 2、muduo 采用基于对象(object- based)而非面向对象( objectoriented)的设计风格,其事件回调接口多以 boost:: function+boost:: bind 表达,用户在使用 muduo 的时候不需要继承其中的 class。 3、muduo 的线程模型: one loop per thread + thread pool 模型。 4、TCP 网络编程最本质的三个半事件: 4.1、..

    2015-03-24 20:32

  • 杰良

    杰良 (继往开来)

    1、两种日志:诊断日志和交易日志 2、关键进程记录的日志 2.1、收到的每条内部消息的 ID、关键字段、长度、hash 值等。 2.2、收到的每条外部消息的全文。 2.3、发出的每条消息的全文。 2.4、关键内部状态变更。 3、一个日志库大致分为:前端 - 生成日志;后端 - 把日志写到目的地。异步日志。 4、日志库应该提供的基本功能: 4.1、日志消息有多种级别(level)。(必需的功能)。 4.2、日..

    2015-03-05 18:12

  • 杰良

    杰良 (继往开来)

    第 3 章 多线程服务器的适用场合与常用编程模型 1、单线程服务器常用的编程模型 non-blocking IO + IO multiplexing(reactor 模式,事件驱动) 2、使用 Reactor 模式的网络程序 2.1、lighttpd 2.2、libevent,libev 2.3、ACE,Poco C++ Libraries 2.4、Java NIO(Apache Mina,Netty) 2.5、POE(Perl) 2.6、Twisted(Python) 3、多线程服务器常用的编程模型 3.1、每个请求创...

    2015-02-16 13:08

  • 杰良

    杰良 (继往开来)

    第 1 章 线程安全的对象生命期管理 1、一个线程安全的 class 应当满足: 1.1、多个线程同时访问时,其表现出正确的行为。无论操作系统如何调度这些线程,无论这些线程的执行顺序如何交织( interleaving)。 1.2、调用端代码无须额外的同步或其他协调动作。 2、线程安全的对象构造方法 2.1、不要在构造函数中注册任何回调函数。 2.2、不要在构造函数中把 this 传递给跨线程的对象。 2.3、采用二段..

    2015-01-06 22:21

<前页 1 2 后页>

笔记是你写在书页留白边上的内容;是你阅读中的批注、摘抄及随感。

笔记必须是自己所写,不欢迎转载。摘抄原文的部分应该进行特殊标明。

Linux多线程服务端编程

>Linux多线程服务端编程