Blog

  • NPTL引起linux系统无法分配内存

    linux系统出现

    -bash: fork: Cannot allocate memory

    查看系统内存

    可用内存充足, 交互分区没被使用,

    -bash: fork: Cannot allocate memory
    -bash: fork: Cannot allocate memory
    -bash: fork: Cannot allocate memory
    [root@node1 ~]# free -h
                  total        used        free      shared  buff/cache   available
    Mem:            31G         18G        956M        133M         11G         11G
    Swap:           15G         78M         15G
    

    (more…)

  • 进程 线程 协程

    来源: 协程

    协程

    协程从go语言的routine来看,单个线程运行多个routine,这些routine都在单个线程中,通过逻辑cpu调度器执行。共同分割一个cpu的时间片。如果有routine阻塞了,就给它起个新的线程进行阻塞等待。

    协程(英语:coroutine)是计算机程序的一类组件,推广了协作式多任务的子程序,允许执行被挂起与被恢复。相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。协程更适合于用来实现彼此熟悉的程序组件,如协作式多任务、异常处理、事件循环、迭代器、无限列表和管道。

    协程可以通过yield(取其“让步”之义而非“出产”)来调用其它协程,接下来的每次协程被调用时,从协程上次yield返回的位置接着执行,通过yield方式转移执行权的协程之间不是调用者与被调用者的关系,而是彼此对称、平等的。

    var q := 新建队列
    
    coroutine 生产者
        loop
            while q 不满载
                建立某些新产品
                向 q 增加这些产品 
            yield 给消费者
    
    coroutine 消费者
        loop
            while q 不空载
                从 q 移除某些产品
                使用这些产品
            yield 给生产者
    

    协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源

    (more…)

  • devtoolset(gcc,g++编译环境集)

    devtoolset

    Developer Toolset is designed for developers working on CentOS or Red Hat Enterprise Linux platform.
    It provides current versions of the GNU Compiler Collection, GNU Debugger, and other development, debugging, and performance monitoring tools.

    devtoolset版本:devtoolset-1.1 devtoolset-2 devtoolset-3 devtoolset-4,以上版本分别对应gcc的版本为4.7、4.8、4.9、5.2

    centos7

    目前已经没有LTS, 很多源不可用. 阿里云的源还可以

    yum install centos-release-scl
    

    修改源为阿里云

     cat /etc/yum.repos.d/CentOS-SCLo-scl.repo
    # CentOS-SCLo-sclo.repo
    #
    # Please see http://wiki.centos.org/SpecialInterestGroup/SCLo for more
    # information
    
    [centos-sclo-sclo]
    name=CentOS-7 - SCLo sclo
    baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
    

    centos

    yum install devtoolset-8
    
    #使新的工具集生效
    scl enable devtoolset-8 bash
    

    (more…)

  • powershell 4.0 安装包下载地址

    {
       "WMF3": {
          "Win7": {
            "x86": "https://download.microsoft.com/download/E/7/6/E76850B8-DA6E-4FF5-8CCE-A24FC513FD16/Windows6.1-KB2506143-x86.msu",
            "x64": "https://download.microsoft.com/download/E/7/6/E76850B8-DA6E-4FF5-8CCE-A24FC513FD16/Windows6.1-KB2506143-x64.msu"
          }
       },
       "DotNet4": "https://download.microsoft.com/download/1/B/E/1BE39E79-7E39-46A3-96FF-047F95396215/dotNetFx40_Full_setup.exe",
       "WMF4": {
          "Win7": {
            "x64": "https://download.microsoft.com/download/3/D/6/3D61D262-8549-4769-A660-230B67E15B25/Windows6.1-KB2819745-x64-MultiPkg.msu",
            "x86": "https://download.microsoft.com/download/3/D/6/3D61D262-8549-4769-A660-230B67E15B25/Windows6.1-KB2819745-x86-MultiPkg.msu"
          },
          "Server2012": "https://download.microsoft.com/download/3/D/6/3D61D262-8549-4769-A660-230B67E15B25/Windows8-RT-KB2799888-x64.msu"
       },
       "WMF5": {
          "Server2008R2": "https://download.microsoft.com/download/2/C/6/2C6E1B4A-EBE5-48A6-B225-2D2058A9CEFB/Win7AndW2K8R2-KB3134760-x64.msu",
          "Server2012": "https://download.microsoft.com/download/2/C/6/2C6E1B4A-EBE5-48A6-B225-2D2058A9CEFB/W2K12-KB3134759-x64.msu",
          "Server2012R2": "https://download.microsoft.com/download/2/C/6/2C6E1B4A-EBE5-48A6-B225-2D2058A9CEFB/Win8.1AndW2K12R2-KB3134758-x64.msu",
          "Win7": {
             "x64": "https://download.microsoft.com/download/2/C/6/2C6E1B4A-EBE5-48A6-B225-2D2058A9CEFB/Win7AndW2K8R2-KB3134760-x64.msu",
             "x86": "https://download.microsoft.com/download/2/C/6/2C6E1B4A-EBE5-48A6-B225-2D2058A9CEFB/Win7-KB3134760-x86.msu"
          },
          "Win81": {
             "x64": "https://download.microsoft.com/download/2/C/6/2C6E1B4A-EBE5-48A6-B225-2D2058A9CEFB/Win8.1AndW2K12R2-KB3134758-x64.msu",
             "x86": "https://download.microsoft.com/download/2/C/6/2C6E1B4A-EBE5-48A6-B225-2D2058A9CEFB/Win8.1-KB3134758-x86.msu"
          }
       },
       "WMF51": {
          "Server2012": "https://download.microsoft.com/download/6/F/5/6F5FF66C-6775-42B0-86C4-47D41F2DA187/W2K12-KB3191565-x64.msu",
          "Server2012R2": "https://download.microsoft.com/download/6/F/5/6F5FF66C-6775-42B0-86C4-47D41F2DA187/Win8.1AndW2K12R2-KB3191564-x64.msu",
          "Win81": {
             "x64": "https://download.microsoft.com/download/6/F/5/6F5FF66C-6775-42B0-86C4-47D41F2DA187/Win8.1AndW2K12R2-KB3191564-x64.msu",
             "x86": "https://download.microsoft.com/download/6/F/5/6F5FF66C-6775-42B0-86C4-47D41F2DA187/Win8.1-KB3191564-x86.msu"
          }
       }
    }
    
  • TCP粘包和拆包_笔记

    TCP 协议

    TCP协议是一种流协议。

    不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

    • 应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。
    • 之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。
    • 然后接收端实体对已成功收到的包发回一个相应的确认(ACK);
    • 如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

    (more…)