iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >如何深入理解Linux磁盘顺序写、随机写
  • 278
分享到

如何深入理解Linux磁盘顺序写、随机写

2023-06-28 17:06:15 278人浏览 八月长安
摘要

这篇文章给大家介绍如何深入理解linux磁盘顺序写、随机写,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。随机写会导致磁头不停地换道,造成效率的极大降低;顺序写磁头几乎不用换道,或者换道的时间很短本文来讨论一下两者具体的

这篇文章给大家介绍如何深入理解linux磁盘顺序写、随机写,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

随机写会导致磁头不停地换道,造成效率的极大降低;顺序写磁头几乎不用换道,或者换道的时间很短本文来讨论一下两者具体的差别以及相应的内核调用

二、环境准备

组件版本
OSubuntu 16.04.4 LTS
fio2.2.10

三、fio介绍

通过fio测试,能够反映在读写中的状态,我们需要重点关注fio的输出报告中的几个关键指标: slat :是指从 I/O 提交到实际执行 I/O 的时长(Submission latency) clat :是指从 I/O 提交到 I/O 完成的时长(Completion latency) lat :指的是从 fio 创建 I/O 到 I/O 完成的总时长 bw :吞吐量 iops :每秒 I/O 的次数

四、同步写测试

(1)同步随机写

主要采用fio作为测试工具,为了能够看到系统调用,使用strace工具,命令看起来是这样:

先来测试一个随机写

 strace -f -tt -o /tmp/randwrite.log -D fio -name=randwrite -rw=randwrite \ -direct=1 -bs=4k -size=1G -numjobs=1  -group_reporting -filename=/tmp/test.db

提取关键信息

 root@wilson-ubuntu:~# strace -f -tt -o /tmp/randwrite.log -D fio -name=randwrite -rw=randwrite \ > -direct=1 -bs=4k -size=1G -numjobs=1  -group_reporting -filename=/tmp/test.db randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1 fio-2.2.10 Starting 1 process ... randwrite: (groupid=0, jobs=1): err= 0: pid=26882: Wed Aug 14 10:39:02 2019   write: io=1024.0MB, bw=52526KB/s, iops=13131, runt= 19963msec     clat (usec): min=42, max=18620, avg=56.15, stdev=164.79      lat (usec): min=42, max=18620, avg=56.39, stdev=164.79 ...     bw (KB  /s): min=50648, max=55208, per=99.96%, avg=52506.03, stdev=1055.83 ...  Run status group 0 (all jobs):   WRITE: io=1024.0MB, aggrb=52525KB/s, minb=52525KB/s, maxb=52525KB/s, mint=19963msec, maxt=19963msec  Disk stats (read/write): ...   sda: iOS=0/262177, merge=0/25, ticks=0/7500, in_queue=7476, util=36.05%

列出了我们需要重点关注的信息: (1)clat ,平均时长56ms左右 (2)lat ,平均时长56ms左右 (3)bw ,吞吐量,大概在52M左右

再来看内核调用信息:

 root@wilson-ubuntu:~# more /tmp/randwrite.log ... 26882 10:38:41.919904 lseek(3, 665198592, SEEK_SET) = 665198592 26882 10:38:41.919920 write(3, "\220\240@\6\371\341\277>\0\200\36\31\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.919969 lseek(3, 4313088, SEEK_SET) = 4313088 26882 10:38:41.919985 write(3, "\220\240@\6\371\341\277>\0\200\36\31\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920032 lseek(3, 455880704, SEEK_SET) = 455880704 26882 10:38:41.920048 write(3, "\220\240@\6\371\341\277>\0\200\36\31\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920096 lseek(3, 338862080, SEEK_SET) = 338862080 26882 10:38:41.920112 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920161 lseek(3, 739086336, SEEK_SET) = 739086336 26882 10:38:41.920177 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920229 lseek(3, 848175104, SEEK_SET) = 848175104 26882 10:38:41.920245 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920296 lseek(3, 1060147200, SEEK_SET) = 1060147200 26882 10:38:41.920312 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920362 lseek(3, 863690752, SEEK_SET) = 863690752 26882 10:38:41.920377 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920428 lseek(3, 279457792, SEEK_SET) = 279457792 26882 10:38:41.920444 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920492 lseek(3, 271794176, SEEK_SET) = 271794176 26882 10:38:41.920508 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 26882 10:38:41.920558 lseek(3, 1067864064, SEEK_SET) = 1067864064 26882 10:38:41.920573 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096 ...

随机读每一次写入之前都要通过lseek去定位当前的文件偏移量

同步顺序写

用刚才的方法来测试顺序写

 root@wilson-ubuntu:~# strace -f -tt -o /tmp/write.log -D fio -name=write -rw=write \ -direct=1 -bs=4k -size=1G -numjobs=1  -group_reporting -filename=/tmp/test.db write: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1 fio-2.2.10 Starting 1 process Jobs: 1 (f=1): [W(1)] [100.0% done] [0KB/70432KB/0KB /s] [0/17.7K/0 iops] [eta 00m:00s] write: (groupid=0, jobs=1): err= 0: pid=27005: Wed Aug 14 10:53:02 2019   write: io=1024.0MB, bw=70238KB/s, iops=17559, runt= 14929msec     clat (usec): min=43, max=7464, avg=55.95, stdev=56.24      lat (usec): min=43, max=7465, avg=56.15, stdev=56.25 ...     bw (KB  /s): min=67304, max=72008, per=99.98%, avg=70225.38, stdev=1266.88 ...  Run status group 0 (all jobs):   WRITE: io=1024.0MB, aggrb=70237KB/s, minb=70237KB/s, maxb=70237KB/s, mint=14929msec, maxt=14929msec  Disk stats (read/write): ...   sda: ios=0/262162, merge=0/10, ticks=0/6948, in_queue=6932, util=46.49%

可以看到: 吞吐量提升至70M左右

再来看一下内核调用:

 root@wilson-ubuntu:~# more /tmp/write.log ... 27046 10:54:28.194508 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\360\t\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194568 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194627 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194687 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194747 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194807 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194868 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194928 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.194988 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195049 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195110 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195197 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195262 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195330 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195426 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195497 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195567 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195637 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195704 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195757 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195807 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195859 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195910 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.195961 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196012 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196062 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196112 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196162 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196213 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196265 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196314 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196363 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196414 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196472 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196524 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 27046 10:54:28.196573 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096 ...

由于顺序读,不需要反复定位文件偏移量,所以能够专注于写操作

五、slat指标

从上面的测试,我们在fio的测试报告中,并没有发现slat的身影,那是由于上述都是同步操作,对同步 I/O 来说,由于 I/O 提交和 I/O 完成是一个动作,所以 slat 实际上就是 I/O 完成的时间

异步顺序写,将同步顺序写的命令添加-ioengine=libaio:

 root@wilson-ubuntu:~# fio -name=write -rw=write -ioengine=libaio -direct=1 -bs=4k -size=1G -numjobs=1  -group_reporting -filename=/tmp/test.db write: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=1 fio-2.2.10 Starting 1 process Jobs: 1 (f=1): [W(1)] [100.0% done] [0KB/119.3MB/0KB /s] [0/30.6K/0 iops] [eta 00m:00s] write: (groupid=0, jobs=1): err= 0: pid=27258: Wed Aug 14 11:14:36 2019   write: io=1024.0MB, bw=120443KB/s, iops=30110, runt=  8706msec     slat (usec): min=3, max=70, avg= 4.31, stdev= 1.56     clat (usec): min=0, max=8967, avg=28.13, stdev=55.68      lat (usec): min=22, max=8976, avg=32.53, stdev=55.72 ...     bw (KB  /s): min=118480, max=122880, per=100.00%, avg=120467.29, stdev=1525.68 ...  Run status group 0 (all jobs):   WRITE: io=1024.0MB, aggrb=120442KB/s, minb=120442KB/s, maxb=120442KB/s, mint=8706msec, maxt=8706msec  Disk stats (read/write): ...   sda: ios=0/262147, merge=0/1, ticks=0/6576, in_queue=6568, util=74.32%

可以看到,slat指标出现,lat 近似等于 slat + clat 之和(avg平均值);并且换成异步io之后,吞吐量得到了极大的提升,120M左右

六、总结

● fio应该作为磁盘的baseline工具,拿到机器(物理机或者云机器)都应该第一时间对机器的磁盘做一个基线测试,做到心中有数 ● 本文所有的测试,都是绕开了缓存,在实际应用中需要将缓存的影响考虑进去

Linux有哪些版本

Linux的版本有:Deepin、UbuntuKylin、Manjaro、LinuxMint、Ubuntu等版本。其中Deepin是国内发展最好的Linux发行版之一;UbuntuKylin是基于Ubuntu的衍生发行版;Manjaro是基于Arch的Linux发行版;LinuxMint默认的Cinnamon桌面类似windows XP简单易用;Ubuntu则是以桌面应用为主的Linux操作系统

关于如何深入理解Linux磁盘顺序写、随机写就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何深入理解Linux磁盘顺序写、随机写

本文链接: https://www.lsjlt.com/news/320587.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何深入理解Linux磁盘顺序写、随机写
    这篇文章给大家介绍如何深入理解Linux磁盘顺序写、随机写,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。随机写会导致磁头不停地换道,造成效率的极大降低;顺序写磁头几乎不用换道,或者换道的时间很短本文来讨论一下两者具体的...
    99+
    2023-06-28
  • Linux系统磁盘顺序写和随机写有什么不同
    这篇文章主要介绍“Linux系统磁盘顺序写和随机写有什么不同”,在日常操作中,相信很多人在Linux系统磁盘顺序写和随机写有什么不同问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统磁盘顺序写和随机...
    99+
    2023-06-28
  • Linux系统顺序写、随机写的示例分析
    Linux系统顺序写、随机写的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、前言● 随机写会导致磁头不停地换道,造成效率的极大降低;顺序写磁头几乎不...
    99+
    2023-06-28
  • 如何理解Linux下的磁盘缓存机制与SSD的写入放大问题
    本篇内容介绍了“如何理解Linux下的磁盘缓存机制与SSD的写入放大问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前段时间在开发一个使用...
    99+
    2023-06-12
  • win10中如何启用磁盘写入缓存
    这篇文章主要介绍“win10中如何启用磁盘写入缓存”,在日常操作中,相信很多人在win10中如何启用磁盘写入缓存问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”win10中如何启用磁盘写入缓存”的疑惑有所帮助!...
    99+
    2023-06-27
  • Windows如何开启磁盘写入缓存加快读写速度
    小编给大家分享一下Windows如何开启磁盘写入缓存加快读写速度,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、右键点击开始菜单,在弹出的菜单中选择“设备管理器...
    99+
    2023-06-28
  • windows磁盘被写保护如何解除
    这篇“windows磁盘被写保护如何解除”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“windows磁盘被写保护如何解除”文...
    99+
    2023-07-02
  • win7磁盘被写保护如何解除
    要解除Win7磁盘的写保护,可以尝试以下方法:1. 检查磁盘的物理开关:有些移动硬盘或U盘上可能有一个物理开关,将其调至“关闭”位置...
    99+
    2023-09-28
    win7
  • win10 u盘磁盘被写保护如何解除
    要解除Windows 10中U盘磁盘的写保护,可以尝试以下方法:1.检查U盘开关:一些U盘设备上有一个物理开关,用于启用/禁用写保护...
    99+
    2023-09-28
    win10
  • 电脑磁盘被写保护如何解除
    本文小编为大家详细介绍“电脑磁盘被写保护如何解除”,内容详细,步骤清晰,细节处理妥当,希望这篇“电脑磁盘被写保护如何解除”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。使用组合快捷键win键+r键打开运行窗口,输入...
    99+
    2023-06-28
  • 如何解决计算机中磁盘被写保护的问题
    这篇文章主要介绍了如何解决计算机中磁盘被写保护的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法一 修改注册表1 在开始菜单栏的搜索框输入“regedit”,打开注册表...
    99+
    2023-06-13
  • 【mysql进阶-彩蛋篇】深入理解顺序io和随机io(全网最详细篇)
    MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解mysql索引优化以及expla...
    99+
    2023-08-17
    mysql 顺序io和随机io 预读 innodb 磁盘
  • 深入探究如何使用Java编写MapReduce程序
    目录MapReduce的原理Map阶段Reduce阶段Shuffle阶段MapReduce程序实现总结 MapReduce的原理 MapReduce由两个主要阶段组成:Map和Red...
    99+
    2023-05-19
    Java编写MapReduce程序 Java编写MapReduce Java MapReduce
  • Windows中如何开启磁盘写入缓存提高传输速度
    这篇文章给大家分享的是有关Windows中如何开启磁盘写入缓存提高传输速度的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。右键计算机,打开设备管理器。展开磁盘驱动器,右键点击磁盘项,打开属性。切换到策略页,勾选“启...
    99+
    2023-06-28
  • 深入解读Python如何进行文件读写
    open Python提供了非常方便的文件读写功能,其中open是读写文件的第一步,通过open读写文件的方式和把大象装冰箱是一样的 f = open("test.txt",'w...
    99+
    2024-04-02
  • 如何理解Discuzx系统CSS编码规范与CSS属性书写顺序
    本篇内容主要讲解“如何理解Discuzx系统CSS编码规范与CSS属性书写顺序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Discuzx系统CSS编码...
    99+
    2024-04-02
  • Linux如何查找占用磁盘IO读写很高的进程方法
    这篇文章给大家分享的是有关Linux如何查找占用磁盘IO读写很高的进程方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。通过 iostat -x 1 10 查看相关磁盘使用信息相关截图如下:1 ...
    99+
    2023-06-05
  • 如何解决Mac无法写入U盘的问题
    这期内容当中小编将会给大家带来有关如何解决Mac无法写入U盘的问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。为了让Mac支持读写ntfs硬盘,许多人都会花钱购买第三方软件。这类软件不仅价格高,还相当不...
    99+
    2023-06-05
  • 如何理解Linux的磁盘和文件系统管理
    这篇文章主要介绍“如何理解Linux的磁盘和文件系统管理”,在日常操作中,相信很多人在如何理解Linux的磁盘和文件系统管理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Linux的磁盘和文件系统管理...
    99+
    2023-06-13
  • 如何理解程序编写中的锁
    这篇文章主要讲解了“如何理解程序编写中的锁”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解程序编写中的锁”吧! 锁到底是一种怎样的存在?随着业务的发展与用户量的增加,高并发问...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作