随笔-201811

  • go协程与java线程

若在资源允许情况下,java线程(1:1)模型并不比go协程慢;只有并发量达到一定量级的时候,java已无力再申请线程栈(64位每栈1M,而go默认2K),故go可以申请更多的线程。

  • 特权指令与非特权指令

CPU指令系统可分为特权指令与非特权指令(特权指令:IO、清内存等;非特权指令:算术逻辑指令、逻辑运算指令、取数存数指令等)。其中,特权指令工作在内核态,访问内核栈(内核栈大小操作系统控制);非特权指令工作在用户态,访问用户栈。需要注意,CPU执行过程中,会根据指令进行内核态与用户态切换。

  • 性能优化

(1)一个系统有了性能问题,先定位,比如通过日志、压测等方式。(一般是由哪些因素引起的呢?---CPU、内存、网络IO、磁盘IO)。

(2)问题是本质,需求是解决问题的方案。所以,产品经理的某个需求只是某个问题的解决方案,而不是真正的问题。所以作为开发人员,一定要记得和产品经理确认原始需求(问题)。也许对于同样的问题,有性能更优的解决方案,即不改变需求本质问题,又达到性能优化效果,是一种无损优化。另外一种方案是PM退一小步,稍微修改需求、放宽条件,大大解决性能问题,这是一种有损方案。

(3)明确需求后,进行方案设计(高手都是花80%时间思考、设计,花20%时间实现),包括架构设计(系统扩展)、技术选型决定了编程语言、代码实现等。如果设计不够好,后面优化很难,甚至需要推到重来。

(4)实现阶段即将设计翻译为代码的过程。

(5)不要过早优化、不要过度优化(可能会破坏代码可读性、可维护性)

  • 对自己的一点要求:熟练读懂UML类图,此为设计阶段重要工具
  • 浏览器发送请求至Nginx是http1.1,而nginx至后端服务是http1.0,http版本客户端和服务端均可控制。比如客户端1.1,而服务端header返回了1.0,也是短链接。
  • 微服务

微服务概念重点在于“微”字,要求服务独立开发、测试、部署,是相对于单体架构而言的。其改造重点在于“拆”字,力度大小如何把控还在实践,一般来说,需要根据“三个火枪手”原则,即满三人可拆分一个模块。

.net中httpclient注意不需要displose,除非并发量很小,否则会开许多socket,time_wait状态。.net httpclient并不会真正关闭socket,time_wait将会保持4min,大大增加了socket耗尽的可能性。

注意MaxConnectionPerServer字段的设置:The maximum number of concurrent connections (per server endpoint) allowed by an HttpClient object。

  • 池化技术   数据库连接池  httpclient连接池   线程池等,通过复用技术来实现。
  • 路由器负责局域网至广域网之间的连接   组建公司网络时,往往需要网卡、网线、集线器(交换机)、路由器4个基本组件。
  • 计算机所传输的数据会被所属网络的所有机器接受,若为一般计算机,则判断是否接受,若为路由器,则判断是否转至其他局域网。

猜你喜欢

转载自blog.csdn.net/jinyidong/article/details/83657376