
1. 編程
文章平均质量分 60
「已注销」
这个作者很懒,什么都没留下…
展开
-
网络框架的实现,客户端更复杂
真正写过底层网络框架的人,应该有一个感受:就是在框架的client/server架构的实现中,表面上server端更重,实际上server端更容易设计实现,而客户端反而需要一些设计和实现的技巧,为什么呢?server端其实没有太大的发挥空间,无非是用性能最好的io模型(epoll/iocp/kqueue)、最好的线程池模型(先进后出,任务队列,协程),分别对accept进来的tcp连接进行数据包接收解析处理以及任务分派,然后处理好连接错误和异常即可。没有太多需要发挥和优化的空间。说白了,公认的最佳范式就原创 2021-09-15 10:39:52 · 198 阅读 · 0 评论 -
http1, http2优缺点对比,以及开源项目iip
一、 http1的缺点,以及对应的http2的优化1. http1是文本协议,“文本协议”的意思是其传输的数据流(包括header和body)必须先转换为ascii码的可见字符。为什么要这样呢?因为他是以\n换行符来进行数据分隔的。如果是传输带额数据是以原本的二进制内码的形式,则会和\n产生冲突,无法解析。而采用文本形式则势必需要对原数据进行文本化编码,比如url-encode,base64,等等,无论哪种编码,都会导致数据的体积增大。http2是二进制协议,无需进行文本化编码,不会导致体积增大。原创 2021-07-08 22:43:18 · 1467 阅读 · 1 评论 -
几句话说清楚代码和注释的关系
几句话说清楚代码和注释的关系代码是一种计算机语言写的小说; 代码的注释是以人类语言去解释这部小说,这种解释不是翻译,是剧情的架构,或者关键点的说明,有助于读代码的人容易理解。因此注释一般采用白话文,避免需要二次注释; 好的代码是流动的思想,好的语言也是; 道,可道,非常道。名,可名,非常名。可以说出来(可)的道理,就不是通用性规律性(常)的道理,可以说出来的定义(名),就不是通用性定义。什么意思呢?就是语言是一种表达思想的工具,但是是有缺陷的,是无法完全贴切的表达他要表达的思想。因此,作为代码原创 2021-07-07 10:48:39 · 255 阅读 · 0 评论 -
python3的对象回收逻辑、及仿照golang的defer语义的实现
本文基于python3及官方解释器cpython的实现。引子:比如说golang,func dealFile(fn string) { fd = open(fn) defer fd.close() //defer保证fd.close在函数结束后被调用 ....//在这里做其他事情}golang通过defer关键字来实现一种保证资源释放的办法,非常好用。若以python来实现相关的需求,有两种办法,with和try...finally比如:...原创 2021-01-19 10:53:47 · 602 阅读 · 1 评论 -
python3的高性能并发编程及web后端架构解决方案
总结一下这两天的学习成果--python3的并发编程及web后端架构解决方案GIL受限于不可释放的历史负担,GIL的存在使得一个python解释器(也就是一个进程)在同一时刻只能使用一个cpu内核(也就是同一时刻只能跑一个线程)。多线程(建议使用标准库的threading模块)代表真实的操作系统线程。线程的使用很方便,常见的方法和其他编程语言类似,是从Threading继承,然后override run()方法,在方法里写线程代码。使用的时候 创建线程对象,调用他的start()..原创 2020-11-12 16:49:31 · 722 阅读 · 1 评论 -
写技术博客的好处
比较欣赏愿意并持续写技术blog的人,有几个原因:会一项技术,然会后能清楚的说明它,是更升级一步,学会了只是大脑的一种意念,用文字表达出来是需要更精细更具体的。第二,分享的同时被读者监督,有助于修正第三,分享有利于他人有利于世界。第四,最重要的。写作有助于发散性思考。常常是自己和自己对话,自己否定自己,又肯定自己。提升编程能力有两种最佳实践:持续写作,和持续设计、构建、和编码。...原创 2020-02-22 08:44:06 · 630 阅读 · 1 评论 -
delphi中採用bpl共享模塊的幾點釋疑
<br />1. LoadPackage做了哪些事情?<br />LoadPackage的代碼可以從delphi的源碼(sysutils.pas)中找到<br />{ LoadPackage }<br />function LoadPackage(const Name: string): HMODULE;<br />begin<br />{$IFDEF MSWINDOWS}<br /> Result := SafeLoadLibrary(Name); //這裡使用windows api LoadLibra原创 2010-11-21 10:03:00 · 1870 阅读 · 0 评论 -
基于windows api实现的共享锁/独占锁
众所周知,windows平台上实现线程同步,或者说资源的加锁与解锁的方法有内核事件、临界区、互斥量、信号量,甚至interlocked系列函数等多种手段。但是在日常的编程中,我们使用这些手段对 “多个线程同时对同一个资源进行读写”的时候,在读写之前先要对资源假锁,读写完之后要对资源解锁。设想这样一种情况,有一个ftp服务器,每天有很频繁的对这个ftp服务的文件进行下载,但是几乎好几天才会对原创 2014-07-11 16:57:12 · 3143 阅读 · 1 评论 -
对Native API NtSystemDebugControl的分析
本文转自http://www.xfocus.net/articles/200408/721.html对Native API NtSystemDebugControl的分析创建时间:2004-08-05文章属性:原创文章提交:tombkeeper (t0mbkeeper_at_hotmail.com)对Native API NtSystemDebugControl的分析转载 2012-12-20 11:09:21 · 716 阅读 · 0 评论 -
《抽象是一种美》
抽象是一种美原创 2013-10-29 10:52:38 · 1112 阅读 · 0 评论 -
c++ 标准库的各种容器(vector,deque,map,set,unordered_map,unordered_set,list)的性能考虑
c++ 标准库的各种容器(vector,deque,map,set,unordered_map,unordered_set,list)的性能考虑 一、vectorvector采用一段连续的内存来存储其元素,向vector添加元素的时候,如果容量不足,vector便会重新malloc一段更大的内存,然后把原内存中的数据memcpy到新的内存中,并free原内存块,然后将新元素加入。vec原创 2013-12-13 15:55:36 · 15106 阅读 · 4 评论 -
关于线程池的一段对话
原创 2017-09-13 11:02:30 · 325 阅读 · 0 评论 -
linux上封装的c++的finally
很多编程语言里面有try...finally...这种结构来保证无论是否发生异常,finallly后面的代码一定会被执行,这个地方常常放置关闭文件、句柄、free对象、解锁等等操作。但c++并没有这种语法结构。号称强大的c++为啥没有这个特性呢?因为c++本身实现这种功能的方式的逼格更高一些。c++有一个RAII的概念,具体可以百度 “c++ RAII”以下的代码就是利用RAII来原创 2016-01-14 15:54:24 · 1163 阅读 · 0 评论 -
说一说golang的协程
协程是应用层的线程。应用层是相对于内核层而言,是操作系统的概念,对应的是cpu的运行级别。操作系统的核心代码运行的ring0级别,应用程序的代码运行在ring3级别。内核与应用层的级别设置保证了一些高权限的操作只有内核代码能做,应用程序要使用这些功能必须通过调用操作系统的API(linux上称为系统调用)来调用内核的代码。这个调用会导致cpu从ring3到ring0的上下文切换,这个切原创 2016-01-13 13:53:30 · 5088 阅读 · 0 评论 -
相较于其他语言,golang的突出特点和优势
编译型协程垃圾收集专为并发编程设计的管道语言简单实用,有效,高效适用于大规模高并发后端服务器程序开发内置高性能http server完善简便的各种库(package)调用C很简便跨平台作者之一是c的作者google出品,成熟,经过工业验证原创 2016-01-12 17:21:14 · 4343 阅读 · 0 评论 -
源码:windows文件分割与合并
//判断文件是否存在bool FileExistsW(const wstring &fn){ WIN32_FIND_DATAW fd; HANDLE hFile = FindFirstFileW(fn.c_str(),&fd); if (hFile != INVALID_HANDLE_VALUE) { ::FindClose(hFile);原创 2014-07-14 01:38:54 · 3506 阅读 · 0 评论 -
windows平台上的一个内存池的实现
.h文件/**********************说明************************** 这是MPool内存池的实现,他具有如下特性:* 1. 池中的内存块是大小是相同的* 2. 由宏定义_MP_NO_SERIALIZE决定是否需要多线程同步* 3. 他利用windows的堆内存API进行内存分配* 4. 他不能替换crt的malloc和free* 5. 他不原创 2014-07-30 11:34:59 · 2248 阅读 · 0 评论 -
c++ 数字转汉字
string zi(int i,int bit){ string ret; if (0==i) ret = "零"; else if(1 == i) ret = "一"; else if(2 == i) ret = "二"; else if(3 == i) ret = "三"; els原创 2014-07-15 11:13:02 · 4057 阅读 · 0 评论 -
關聯update SQL
部門表A,字段:SDEPTKEY:主鍵SDEPTID:部門號SDEPTNAME:部門名稱員工表B, 字段:SEMPKEY:主鍵 SDEPTKEY:foreign key:A.SDEPTKEYSDEPTID:部門號SEMPID:員工號SEMPNAME:姓名現在B.SDEPTKEY亂了,要根據B.DEPTID = A.DEPTID的關系。把它修正過來。在SQL Server中,有兩種Update原创 2008-01-11 12:44:00 · 1355 阅读 · 0 评论 -
笔记:VCL的诞生和设计原理
回顧第一章: 回到從前(framework的產生背景) 第二章 VCL的诞生和设计原理2.1誕生chuck jazdzewski,anders heislberg目標:16/32混合單繼承PME模型運行/設計期行為面向對象開放的組件模型消息分派 采用類/繼承的方式。演化:接口,COM,MIDAS 2.2設計 2.3v原创 2008-02-27 20:49:00 · 1551 阅读 · 0 评论 -
隨想:軟件開發文檔
其實做哪一行都一樣,要想做好一件事,需要有個標准,有個規范,而且這個規范不是條文口號式的,而是實實在在的能為工作帶來品質提升的內容。從事這個行業有好幾年了,經歷過小的,大的,標准的,非標准各種企業,感受頗深的一點就是:文檔工作沒有一家企業做得好的。 我講的文檔指的是軟件開發文檔。從實用的角度出來,我認為傳統的分析、設計、編碼、測試這個統一模式下的文檔太泛化,講得比較虛,跟實際相差原创 2007-02-09 10:56:00 · 1174 阅读 · 0 评论 -
我所理解的VCL消息處理流程
一、VCL消息處理流程:1.Application從windows消息隊列中取得屬於當前線程的所有消息。2.Application:translatemessage.3.Application:dispatchmessage分派消息 3.1 dispatchmessage根據消息中的handle來找到目標元件的回調函數,並調用這個回調函數(wndproc)。4.每個元件(TWincontrol及原创 2007-01-30 15:15:00 · 1279 阅读 · 0 评论 -
信息系統通用緩存設計
!請勿轉載! 一、概述设计一个这样的通用缓存,是基于目前Erp系统中对缓存的使用没有一个统一的机制的局面,为了最大化的提高程序效能,优化对资料库的访问,简化对缓存数据的访问代码编写。以及还有一些我暂时还没有想到的好处。 分为5個部分:1.緩存的對象類型 a.n個TCachedArray,數組類集合 b.n個TCachedDictionary,字典類集合原创 2008-02-21 21:08:00 · 1143 阅读 · 0 评论 -
《oracle pl/sql programming》 第10章 date/timestamp
1.Datetime數據類型DATE:最早的日期時間類型,精確到秒TIMESTAMP: 比DATE更精確的日期時間型,精確到十億分之一秒(當然能否精確到那么小有賴于操作系統和硬件)TIMESTAMP WITH TIME ZONE:存儲了TIMESTAMP和時區TIMESTAMP WITH LOCAL TIME ZONE:會將輸入的日期時間轉換為當前時區的日期時間。從下圖可以看出原创 2007-11-04 11:35:00 · 5915 阅读 · 0 评论