首页
学习
活动
专区
工具
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

9.1K00

HasMap初始容量设置

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

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

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

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不太方便直接给出,这里仅展示系统负载这一指标的压测结果。

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.7K10

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幂。

91610

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

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

1.6K20

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:文件系统挂载位置。

1.6K21

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

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

5.9K20

闹心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.3K30

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.6K30

闹心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分钟都不够~~~

89420

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种不同情形下情况也应设置不同条件。

3K90

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.7K20

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为单位输出。

6K30
领券