首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux - pipe() 管道的使用

初识 Pipe pipe , 中文翻译为管道,是 Unix/Linux 系统中一种比较常用的 IPC(Inter Process Communication) 。...image.png 上图很生动地描绘出这组命令的工作流程。pipe 就像一根圆管,ls 的输出内容流入到圆管的一端 (标准输出)。随后,内容一直流到圆管的另一端 (标准输入) 由 wc 接收。...创建 Pipe #include int pipe(int[2] pfd); 我们需要向 pipe() 传入一个大小为 2 的数组,与此同时内核会维护一个临时的 buffer,...image.png 调用 pipe() ,再调用 fork() 。尽管,管道是在父进程创建的,但是子进程以拷贝的形式继承父进程的 open file descriptors 。...参考 [^1] 44.2 Figure 44-2, The Linux Programming Interface [^2] 44.2 Figure 44-3, The Linux Programming

10K00

HasMap初始容量设置

容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度。...当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行 rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。     ...在设置初始容量时应该考虑到映射中所需的条目数及其加载因子,以便最大限度地减少 rehash 操作次数。如果初始容量大于最大条目数除以加载因子,则不会发生 rehash 操作。...二、举例 像HashMap,默认大小是16,也就是支持存储最多20个键值对,如果不超过20个键值对,可以不设置,如果超出,按如下公式计算后设置: initialCapacity = (需要存储的元素(键值对...)个数 / 负载因子) + 1 但是,hashmap在我们存放的数据大于初始化容量*负载因子(默认0.75)时就会自动扩容,自动扩容是非常消耗性能的。

16810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux-管线命令(pipe)

    管线命令以 | 作为界定符号,将前一个命令的执行标准输出(standard output)作为输入传给之后的命令。 管线命令会忽略标准错误输出的信息(standard error)。...管线命令要能够接受前一个指令的输出数据才能继续执行 如果要接受错误信息可以用数据重定向(2>&1)将标准错误输出重定向到标准输出 常用管线命令 截取:cut 分析:grep 排序:sort 删除重复项:...双向重导向:tee 字符串转换: 删除或替换:tr 文本过滤:col 文件对比:join 文件合并:paste 空格转换expand 分区命令:split 参数代换:xargs 减号可以代替前一个命令的stdout...和后一个命令的stdin,例如: tar -cvf - /home | tar -xvf - -C /tem/homeback

    1.1K30

    Linux内核编程--管道pipe

    管道的定义: 管道是一种进程间通信机制,也是Linux操作系统中的一种文件形式。一个进程写入管道的数据可以被另一个进程读取。数据按先进先出顺序处理。Linux有两种形式的管道文件,管道和FIFO。...管道的创建: 管道由pipe函数创建 #include int pipe(int fd[2]) --创建一个管道并将管道读写端的文件描述符(分别)放入fd[0]和fd[1] --...)的创建 FIFO与pipe不同的是,每个FIFO有一个路径名与之关联,从而允许无亲缘关系的进程访问同一个FIFO。...--mode参数,定义在了中, 指定了FIFO的权限 --mkfifo函数已隐含了 O_CREAT | O_EXCL 创建并打开一个管道只需要调用pipe(), 创建并打开一个...,需要对管道和FIFO加以限制: OPEN_MAX: 一个进程在任意时刻打开的最大描述符数 PIPE_BUF:可原子地写往一个管道或FIFO的最大数据量 shell脚本中的管道指令: 参考阅读: https

    3.8K10

    Java线程池容量设置

    本文由杨青同学投稿,总结了他在近期工作中对线程池容量设置的一点经验。...原文发于微信公众号:Java线程池容量设置 创建线程池的方式 Java中可以通过Executors和ThreadPoolExecutor的方式创建线程池,通过Executors可以快速创建四种常见的线程池...图1 选自infoQ文章聊聊并发(三) 具体讲解可以参考清英在infoQ发布的文章:http://www.infoq.com/cn/articles/java-threadPool 线程池容量设置 线程池的...corePoolSize设置是整个线程池中最关键的参数,设置太小会导致线程池的吞吐量不足,因为新提交的任务需要排队或者被handler处理掉(取决于拒绝策略);设置太大可能会耗尽计算机的CPU和内存资源...在压测的过程中发现,当线程数量设置的更合理时TPS更高且接口的RT较低;而线程池设置过大导致TPS下降和RT上涨。由于RT和TPS不太方便直接给出,这里仅展示系统负载这一指标的压测结果。

    1.1K30

    linux 进程通信-管道(pipe)《Rice linux 学习开发》

    Pipe概述 管道是Linux中进程间通信的一种方式,它分为三种:无名管道,标准流管道,有名管道。...的无名管道通信> 用pipe()函数创建的管道两端处于一个进程中,由于管道主要用于不同进程间的通信,因此实际应用中没有太大意义。...与普通文件的开发设置一样,对于为读而打开的管道可在open()中设置O_RDONLY,对于为写而打开的管道可在open()中设置O_WRONLY,在这里与普通文件不同的是阻塞问题 由于普通文件的读写是不会出现阻塞问题...> 例程 通道例程中,提供了有名管道的读例程和写例程,例程请参考我github的pipe目录下的read.c和write.c。...github链接:https://github.com/RiceChen/Linux-process-communication.git,记得加个star

    1.7K20

    HashMap的默认容量为什么要设置16?

    扩容时; 指定容量初始化值时 HashMap根据用户传入的初始化容量,利用无符号右移和按位或运算等方式计算出第一个大于该数的2的幂。...其目的对于一个数字的二进制,从第一个不为0的位开始,把后面的所有位都设置成1。...总之,HashMap根据用户传入的初始化容量,利用无符号右移和按位或运算等方式计算出第一个大于该数的2的幂。 扩容 除了初始化的时候会指定HashMap的容量,在进行扩容的时候,其容量也可能会改变。...loadFactor是装载因子,表示HashMap满的程度,默认值为0.75f,设置成0.75有一个好处,那就是0.75正好是3/4,而capacity又是2的幂。 所以,两个数的乘积都是整数。...所以,通过保证初始化容量均为2的幂,并且扩容时也是扩容到之前容量的2倍,所以,保证了HashMap的容量永远都是2的幂。

    1.1K10

    【Linux入门】查看磁盘容量

    本文主要介绍在 CentOS 7.x 下如何查看磁盘整体容量、具体目录及文件磁盘容量占用情况。...命令格式:df [参数]] [目录或文件名]# 参数(为可选)-a:列出所有的文件系统-h:以较易阅读的 GB、MB、KB 等格式显示-T:显示文件系统类型-i:不用硬盘容量,而以 inode 的数量来显示命令示例...例如 /dev/vda1是磁盘分区,tmpfs是临时文件系统1K-blocks:文件系统的总大小Used:已经使用的空间大小Available:剩余可用的空间大小Use%:已使用空间的百分比Mounted...例如,/ 代表根目录以上为显示磁盘容量信息,如输入参数 -i ,则不显示磁盘容量,而是以 inode 的数量进行显示。...的百分比Mounted on:文件系统挂载的位置。

    2.7K21

    应如何设置HashMap容量的初始值?

    应如何设置HashMap容量的初始值?...然后有看过阿里编程规范的应该知道,规范里指出在使用hashMap时候是可以指定一个初始化的容量的,然后具体原因是什么?...反例: HashMap 需要放置 1024 个元素,由于没有设置容量初始大小,随着元素增加而被迫不断扩容, resize()方法总共会调用 8 次,反复重建哈希表和数据迁移。...从上面信息可以知道几个知识点: HashMap默认的初始化容量是16,也就是不指定的情况,就是16 规范里建议我们设置 initialCapacity = (需要存储的元素个数 / 负载因子) + 1...,发现,里面都要3个数据是1001,所以这种情况就会出现hash冲突 ok,归纳一下,设置为2的n次方的原因: hash & (n-1) 和 hash % n 在2的n次方的情况,会相等,而且与运算效率更高

    6.4K20

    闹心的Broken pipe

    bug描述 出现在excel导入的时候 线上有问题,本地不可重现 数据量少的时候没问题,excel基本超过1500行就出现问题 查看日志 [错误日志.png] 解决 看日志,应该是失去客户端连接。...猜测应该是导入操作的http请求超时。 在导入方法添加日志,发现后台导入逻辑还在执行时候ajax已经返回超时了。猜测导入操作的ajax时长设置有问题。...查看代码,导入操作$.ajax({})提交,设置timeout:0,测试,依然超时。后台使用springboot+easypoi,猜测springboot有设置http超时时长。...修改springboot配置server.connection-timeout=120000为两分钟,测试,依然超时,但是发现一个有趣的地方,每次都是到1分钟时候超时,因此问题肯定不在以上两个地方 全局搜...proxy_pass http://adminService; } ps: 可能有童鞋提出导入时间太长,这个也作为优化的一个角度,可是数据再多的时候,也可能2分钟都不够~~~ nginx

    6.4K30

    Linux进程间通信--管道(pipe和fifo)

    pipe        首先先来说一下pipe,这是一个匿名管道(为啥叫匿名呢,下面讲命名管道的时候就知道了),实现方式是循环队列,它只能用于有血缘关系的进程间通信。...首先我们先来看一下pipe函数的原型: #include int pipe(int pipefd[2]);        传入的参数是一个大小为...用一个父子进程来举例,如果要实现父子进程间的通信,在fork前就需要创建一个pipe管道,如果创建成功返回0,如果失败返回-1并设置errno,由于子进程复制了父进程的PCB,所以子进程也有父进程的文件描述符表...代码如下: printf("%ld\n", fpathconf(fd[0], _PC_PIPE_BUF));        还有就是我们可以通过设置O_NONBLOCK参数来实现非阻塞的情况,也就是说当一个进程还没有写数据时...,另一个读进程就会阻塞在那里,那么如果设置了O_NONBLOCK参数,该进程就不会阻塞在那里,会返回-1,并设置errno为EAGAIN,可以用goto语句或者while循环实现,那么设置O_NONBLOCK

    3.8K30

    linux系统编程之管道(二):管道读写规则和Pipe Capacity、PIPE_BUF

    ,直到有进程读走数据 O_NONBLOCK enable:调用返回-1,errno值为EAGAIN 管道是一块内存缓冲区,可以写个小程序测试一下管道的容量Pipe Capacity: /*******.../pipe_capacity  err=Resource temporarily unavailable count=65536 打印了错误码,可以看到管道的容量是64kB,man 7 pipe...五、当要写入的数据量不大于PIPE_BUF时,linux将保证写入的原子性;当要写入的数据量大于PIPE_BUF时,linux将不再保证写入的原子性。...需要注意的是是边写边读,因为前面说过管道的容量只有64k,当管道被写满时子进程就阻塞等待父进程读取后再写入。...总之测试4种不同情形下的情况也应设置不同的条件。

    3.2K90

    闹心的Broken pipe

    bug描述 出现在excel导入的时候 线上有问题,本地不可重现 数据量少的时候没问题,excel基本超过1500行就出现问题 查看日志 ? 解决 看日志,应该是失去客户端连接。...猜测应该是导入操作的http请求超时。 在导入方法添加日志,发现后台导入逻辑还在执行时候ajax已经返回超时了。猜测导入操作的ajax时长设置有问题。...查看代码,导入操作$.ajax({})提交,设置timeout:0,测试,依然超时。后台使用springboot+easypoi,猜测springboot有设置http超时时长。...修改springboot配置server.connection-timeout=120000为两分钟,测试,依然超时,但是发现一个有趣的地方,每次都是到1分钟时候超时,因此问题肯定不在以上两个地方 全局搜...proxy_pass http://adminService; } ps: 可能有童鞋提出导入时间太长,这个也作为优化的一个角度,可是数据再多的时候,也可能2分钟都不够~~~

    92720

    Linux对大容量磁盘分区

    1.使用fdisk -l命令,查看可分区的磁盘 2.使用parted命令进行分区 parted /dev/sdb 3.创建分区表 mklabel 磁盘类型选择 gpt , 警告选择yes,代表清除磁盘原有信息...命令查看当前分区情况 5.使用mkpart命令,创建分区 分区名称随意 文件系统按要求 起始结束按要求,然后Ignore忽略警告 ,,, 其中 结束点可以使用百分比, 比如100%,,来代表使用剩余的空间...注意, 分第一个分区时,最好使用分区对齐,否则会出现警告,对齐方法(可能会损失几M容量) 查看当前磁盘参数 使用公式 (optimal_io_size+alignment_offset)/physical_block_size...算出第一个分区的起始 如图则是 : (1835008+0)/512 = 3584 则parted参数,第一个起始位置,可以是 3584s 另外,注意一点,,,分区尽量采用%来分区,,,比如 3584s

    2.8K20

    Linux命令_磁盘管理_查看磁盘或目录的容量

    软件环境:虚拟机VM12,Linux版本 CentOS 7.3 命令 df (disk filesystem) 用于查看已挂载磁盘的总容量、使用容量、剩余容量等,可以不加任何参数,默认以KB为单位显示。...在上例的结果中: / 、/boot是我们在安装系统时划分出来的。...(具体可参照 Linux操作系统的安装) /dev、/dev/shm 为内存分区,默认大小为内存大小的1/2,将文件存在这个分区下相当于存在了内存中,优点是读写速度非常快,缺点是系统重启时文件就会丢失。...df命令的常用选项有 -i、-h、-k、-m,以下就开始逐一讲解: 1,df -i:查看inodes的使用状况,如果已使用100%,即使磁盘空间有富余,也会提示磁盘空间已满。 ?...如果后面不加任何选项和参数,则只会列出目录(包含子目录)的大小。如果du命令不指定单位的话,默认显示单位为“KB”。 ? ? 2,du -[bkmh] du -b:表示列出的值以B为单位输出。

    6.1K30
    领券