stress是一个在linux下的压力测试小工具。

我看到有些人用这个工具来描述一些资源耗尽的场景,也有人用它来做混沌测试中。请使用者要注意,这个工具并不是模拟业务问题的,是模拟系统级问题的。所以用它来模拟的时候,和业务真实场景差别还是很大的。


因为在性能工作中,经常有人因为不理解工具而误用工具,所以这里我把这个工具拿出来说明一下。

(像这种我觉得没有自己思考的文章,就不设置付费了。)

安装stress

yum install -y stress

stress参数

[root@7DGroupT1 ~]# stress
`stress' imposes certain types of compute stress on your system

Usage: stress [OPTION [ARG]] ...
-?, --help show this help statement
--version show version statement
-v, --verbose be verbose
-q, --quiet be quiet
-n, --dry-run show what would have been done
-t, --timeout N timeout after N seconds
--backoff N wait factor of N microseconds before work starts
-c, --cpu N spawn N workers spinning on sqrt()
-i, --io N spawn N workers spinning on sync()
-m, --vm N spawn N workers spinning on malloc()/free()
--vm-bytes B malloc B bytes per vm worker (default is 256MB)
--vm-stride B touch a byte every B bytes (default is 4096)
--vm-hang N sleep N secs before free (default none, 0 is inf)
--vm-keep redirty memory instead of freeing and reallocating
-d, --hdd N spawn N workers spinning on write()/unlink()
--hdd-bytes B write B bytes per hdd worker (default is 1GB)

Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

Note: Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size).
[root@7DGroupT1 ~]#

参数可以说非常简单了。大概看一眼就可以知道,它可以模拟CPU、IO、内存、磁盘这些常见又重要的资源消耗。

下面就一一来看一下。

模拟CPU

[root@7DGroupT1 ~]# stress -c 4 -t 100
top - 10:48:11 up 63 days, 23:57,  2 users,  load average: 0.67, 1.41, 4.21
Tasks: 122 total, 5 running, 117 sleeping, 0 stopped, 0 zombie
%Cpu0 : 99.7 us, 0.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8010528 total, 5550792 free, 1866688 used, 593048 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 5762564 avail Mem

模拟CPU的参数很简洁。打印一下栈看一下:

[root@s6 ~]# pstack 29253#0  0x00007f123634761b in random () from /usr/lib64/libc.so.6#1  0x00007f1236347b39 in rand () from /usr/lib64/libc.so.6#2  0x0000557e9ea32dbd in hogcpu ()#3  0x0000557e9ea3180a in main ()[root@s6 ~]

其实代码很简单,就是一个hogcpu函数。源码是这样的:

inthogcpu (void){  while (1)    sqrt (rand ());
return 0;}

是不是看了之后觉得自己都能写一个了?不就是一个while吗?

模拟内存

[root@7DGroupT1 ~]# stress --vm 30 --vm-bytes 1G --vm-hang 50 --timeout 50s
[root@7DGroupT1 ~]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 5606796 6828 534736 0 0 4548 212 457 710 0 0 99 1 0
0 0 0 5597852 6976 544360 0 0 9712 52 666 1163 0 0 99 1 0
0 0 0 5595060 7136 545828 0 0 1752 0 440 580 0 0 98 2 0
30 0 0 2125872 7136 546040 0 0 8 0 1098 522 0 21 79 0 0
0 14 0 100896 200 211224 0 0 529748 2932 25058 43164 1 51 4 44 0
[root@7DGroupT1 ~]# sar -B 1
Linux 3.10.0-514.21.1.el7.x86_64 (7DGroupT1) 10/03/2019 _x86_64_ (4 CPU)

10:52:49 AM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
10:52:50 AM 8.00 68.00 122.00 0.00 1143.00 0.00 0.00 0.00 0.00
10:52:51 AM 0.00 0.00 29.00 0.00 25.00 0.00 0.00 0.00 0.00
10:52:52 AM 0.00 0.00 184.00 0.00 45.00 0.00 0.00 0.00 0.00
10:52:53 AM 0.00 0.00 2482.00 0.00 804.00 0.00 0.00 0.00 0.00
10:52:54 AM 870.77 2436.92 172704.62 2.31 92710.00 38558.46 26820.00 61888.46 94.66
10:52:56 AM 76853.61 618.56 34391.24 82.47 1297422.16 205238.14 404672.68 14717.53 2.41
10:52:57 AM 125560.00 300.00 4875.00 110.00 5040.00 0.00 0.00 0.00 0.00
10:52:58 AM 111080.00 0.00 8940.00 68.00 4723.00 0.00 0.00 0.00 0.00
10:52:59 AM 80944.00 0.00 5725.00 40.00 1636.00 0.00 0.00 0.00 0.00
10:53:00 AM 26224.00 300.00 37293.00 2.00 534.00 0.00 0.00 0.00 0.00
10:53:01 AM 7344.00 180.00 1092.00 0.00 17475.00 0.00 0.00 0.00 0.00
10:53:02 AM 24576.00 224.00 5725.00 41.00 1866.00 0.00 0.00 0.00 0.00
[root@7DGroupT1 ~]# sar -r 1
Linux 3.10.0-514.21.1.el7.x86_64 (7DGroupT1) 10/03/2019 _x86_64_ (4 CPU)

10:56:55 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
10:57:13 AM 5582520 2428008 30.31 7648 447240 5643636 70.45 1780508 443288 3400

10:57:14 AM 101544 7908984 98.73 6736 375896 37108100 463.24 7328268 367028 3404

从上面的数据来看,确实产生了很大的page faults,这也是模拟内存消耗的过程中必然会出现的现象。之前我也强调过,看内存够不够,就是要看这个faluts。

在Stress中,怎么模拟的内存呢。来看一下。

inthogvm (long long bytes, long long stride, long long hang, int keep){  long long i;  char *ptr = 0;  char c;  int do_malloc = 1;
while (1) { if (do_malloc) { dbg (stdout, "allocating %lli bytes ...\n", bytes); if (!(ptr = (char *) malloc (bytes * sizeof (char)))) { err (stderr, "hogvm malloc failed: %s\n", strerror (errno)); return 1; } if (keep) do_malloc = 0; }
dbg (stdout, "touching bytes in strides of %lli bytes ...\n", stride); for (i = 0; i < bytes; i += stride) ptr[i] = 'Z'; /* Ensure that COW happens. */
if (hang == 0) { dbg (stdout, "sleeping forever with allocated memory\n"); while (1) sleep (1024); } else if (hang > 0) { dbg (stdout, "sleeping for %llis with allocated memory\n", hang); sleep (hang); }
for (i = 0; i < bytes; i += stride) { c = ptr[i]; if (c != 'Z') { err (stderr, "memory corruption at: %p\n", ptr + i); return 1; } }
if (do_malloc) { free (ptr); dbg (stdout, "freed %lli bytes\n", bytes); } }
return 0;}

就是一个死循环加上一个内存malloc。

模拟磁盘

[root@7DGroupT1 ~]# stress --hdd 5 --hdd-bytes 1G
[root@7DGroupT1 ~]# top
top - 10:35:15 up 63 days, 23:44, 2 users, load average: 9.14, 8.49, 8.29
Tasks: 124 total, 2 running, 122 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.0 us, 5.8 sy, 0.0 ni, 0.0 id, 94.2 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 1.0 us, 1.0 sy, 0.0 ni, 14.4 id, 83.6 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.0 us, 4.4 sy, 0.0 ni, 0.0 id, 95.6 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 0.0 us, 4.1 sy, 0.0 ni, 0.0 id, 95.9 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8010528 total, 1940088 free, 1891792 used, 4178648 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 5687416 avail Mem

[root@7DGroupT1 ~]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 7 0 1474132 146392 4499176 0 0 0 12 0 1 0 0 100 0 0
0 7 0 1384720 146392 4589204 0 0 0 107624 815 966 0 3 8 88 0
0 7 0 1292432 146392 4681232 0 0 0 98920 1036 987 0 3 13 84 0
0 7 0 1194932 146392 4777968 0 0 0 115344 1033 1207 0 4 0 96 0
1 6 0 1094312 146392 4880044 0 0 0 105260 928 930 0 3 5 92 0
1 6 0 998756 146416 4974944 0 0 0 102812 862 928 0 3 0 97 0
0 7 0 897960 146448 5075492 0 0 0 131200 1268 1565 1 4 5 91 0
3 4 0 1626628 146472 4347076 0 0 0 82804 1444 1206 0 8 10 81 0
0 7 0 2354208 146656 3620344 0 0 0 118112 2229 1256 0 27 2 70 0
0 7 0 3264136 146804 2709776 0 0 0 110632 1761 1506 0 9 0 90 0
0 7 0 3143120 146940 2831728 0 0 4 106896 1211 1112 0 5 0 95 0
0 7 0 2961456 146940 3016064 0 0 0 91456 1484 1298 0 6 0 94 0
^C
[root@7DGroupT1 ~]# sar -d 1
10:54:19 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
10:54:20 AM dev253-0 307.00 24.00 229976.00 749.19 126.47 454.24 3.26 100.00
10:54:20 AM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

10:54:20 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
10:54:21 AM dev253-0 369.00 48.00 228528.00 619.45 127.11 347.24 2.71 100.00
10:54:21 AM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

10:54:21 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
10:54:22 AM dev253-0 274.00 24.00 203760.00 743.74 127.45 404.61 3.65 100.00
10:54:22 AM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

10:54:22 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
10:54:23 AM dev253-0 262.00 0.00 202000.00 770.99 127.61 486.35 3.82 100.10
10:54:23 AM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

10:54:23 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
10:54:24 AM dev253-0 288.00 0.00 232352.00 806.78 127.92 479.62 3.47 100.00
10:54:24 AM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
[root@7DGroupT1 ~]# iostat -x -d 1

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 8603.00 4.00 255.00 16.00 101840.00 786.53 125.75 471.71 3.00 479.06 3.86 100.00
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 8952.00 4.00 294.00 16.00 117176.00 786.52 127.03 470.79 3.75 477.14 3.36 100.00
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 9059.00 1.00 266.00 4.00 101900.00 763.33 126.55 433.52 0.00 435.15 3.75 100.00
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 6234.00 0.00 273.00 0.00 96784.00 709.04 127.94 391.18 0.00 391.18 3.67 100.10
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
[root@7DGroupT1 ~]# iotop
Total DISK READ : 0.00 B/s | Total DISK WRITE : 102.23 M/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 75.93 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
8681 be/4 root 0.00 B/s 20.93 M/s 0.00 % 98.97 % stress --hdd 5 --hdd-bytes 1G
8677 be/4 root 0.00 B/s 20.23 M/s 0.00 % 95.92 % stress --hdd 5 --hdd-bytes 1G
8680 be/4 root 0.00 B/s 20.23 M/s 0.00 % 95.59 % stress --hdd 5 --hdd-bytes 1G
8679 be/4 root 0.00 B/s 20.61 M/s 0.00 % 95.17 % stress --hdd 5 --hdd-bytes 1G
8678 be/4 root 0.00 B/s 20.23 M/s 0.00 % 95.16 % stress --hdd 5 --hdd-bytes 1G
7298 be/4 root 0.00 B/s 0.00 B/s 0.00 % 86.91 % [kworker/u8:1]
285 be/3 root 0.00 B/s 0.00 B/s 0.00 % 86.72 % [jbd2/vda1-8]
16384 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % YDService
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --syst~deserialize 21
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
516 be/4 libstora 0.00 B/s 0.00 B/s 0.00 % 0.00 % lsmd -d
5 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H]
518 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % acpid
7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
8 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_bh]
9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_sched]
10 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0]
11 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/1]
12 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1]
13 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/1]
526 be/4 polkitd 0.00 B/s 0.00 B/s 0.00 % 0.00 % polkitd --no-d~ Sour~ Thread]
15 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/1:0H]
16 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/2]
17 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/2]
18 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/2]
515 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % python -Es /us~in/tuned -l -P
20 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/2:0H]
21 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/3]
22 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/3]
23 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/3]
25 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/3:0H]
27 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kdevtmpfs]
28 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [netns]
29 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [khungtaskd]
30 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [writeback]

模拟磁盘,看起来效果也是非常不错的哦。来翻一下源码。

inthoghdd (long long bytes){  long long i, j;  int fd;  int chunk = (1024 * 1024) - 1;        /* Minimize slow writing.  */  char buff[chunk];
/* Initialize buffer with some random ASCII data. */ dbg (stdout, "seeding %d byte buffer with random data\n", chunk); for (i = 0; i < chunk - 1; i++) { j = rand (); j = (j < 0) ? -j : j; j %= 95; j += 32; buff[i] = j; } buff[i] = '\n';
while (1) { char name[] = "./stress.XXXXXX";
if ((fd = mkstemp (name)) == -1) { err (stderr, "mkstemp failed: %s\n", strerror (errno)); return 1; }
dbg (stdout, "opened %s for writing %lli bytes\n", name, bytes);
dbg (stdout, "unlinking %s\n", name); if (unlink (name) == -1) { err (stderr, "unlink of %s failed: %s\n", name, strerror (errno)); return 1; }
dbg (stdout, "fast writing to %s\n", name); for (j = 0; bytes == 0 || j + chunk < bytes; j += chunk) { if (write (fd, buff, chunk) == -1) { err (stderr, "write failed: %s\n", strerror (errno)); return 1; } }
dbg (stdout, "slow writing to %s\n", name); for (; bytes == 0 || j < bytes - 1; j++) { if (write (fd, &buff[j % chunk], 1) == -1) { err (stderr, "write failed: %s\n", strerror (errno)); return 1; } } if (write (fd, "\n", 1) == -1) { err (stderr, "write failed: %s\n", strerror (errno)); return 1; } ++j;
dbg (stdout, "closing %s after %lli bytes\n", name, j); close (fd); }
return 0;}

死循环加上for循环不断的调用write。这个调用,就是不停地做写的动作。这个和我们在上面看到的监控数据也是一致的。

总结一下,通过这些源码说明,请你在使用的时候,要注意一下,像这样的工具,如果说只是为了单纯地消耗系统级的资源,然后观察应用在较少的可用资源下的表现如何,这样的工具是可以用的。

但是如果是想要模拟你的业务层出现的问题,那我劝你还是别用这样的工具了。

 

性能工具之stress工具使用教程(带源码说明)的更多相关文章

  1. 10个带源码的充满活力的Web设计教程

    10个带源码的充满活力的Web设计教程 2013-08-02 16:47 佚名 OSCHINA编译 我要评论(0) 字号:T | T Web设计师必须了解各种各样的Web设计风格,这才能让他或者她在设 ...

  2. Orchard CMS中如何打包不带源码的模块

    在Orchard CMS的官网已经提供了文档说明如何打包,但是如果使用它的打包方式,打好的nuget包是带源代码的.如果是为开源系统写模块,不需要关注源代码是否可见.但是如果是用Orchard CMS ...

  3. 【百度地图API】多家地图API内存消耗对比测验(带源码)

    原文:[百度地图API]多家地图API内存消耗对比测验(带源码) 任务描述: 啊,美妙的春节结束了.酸奶小妹和妈妈的山西平遥之旅也宣告成功!距离平遥古城7km,有一个同样身为“世界文化遗产”的寺庙,叫 ...

  4. 动态语言切换(续)-designer中的retranslateUi(带源码)

    本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息.原文链接.原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途. 谢谢合作.原文链接:动态语言切换(续)-designer中 ...

  5. 转】MyEclipse使用总结——使用MyEclipse打包带源码的jar包

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4136303.html 感谢! 平时开发中,我们喜欢将一些类打包成jar包,然后在别的项目中继续使用,不过由于看不 ...

  6. MyEclipse使用总结——使用MyEclipse打包带源码的jar包

    平时开发中,我们喜欢将一些类打包成jar包,然后在别的项目中继续使用,不过由于看不到jar包里面的类的源码了,所以也就无法调试,要想调试,那么就只能通过关联源代码的形式,这样或多或少也有一些不方便,今 ...

  7. c# winform 中的 工具栏自动隐藏 splitter用法 带源码

    c# winform 中的 工具栏自动隐藏 splitter用法 带源码 代码下载地址 http://download.csdn.net/detail/simadi/7649313

  8. shiro实现无状态的会话,带源码分析

    转载请在页首明显处注明作者与出处 朱小杰      http://www.cnblogs.com/zhuxiaojie/p/7809767.html 一:说明 在网上都找不到相关的信息,还是翻了大半天 ...

  9. PHP简单的长文章分页教程 附源码

    PHP简单的长文章分页教程 附源码.本文将content.txt里的内容分割成3页,这样浏览起来用户体验很好. 根据分页参数ipage,获取对应文章内容 include('page.class.php ...

  10. MyEclipse打包带源码的jar包

    平时开发中,我们喜欢将一些类打包成jar包,然后在别的项目中继续使用,不过由于看不到jar包里面的类的源码了,所以也就无法调试,要想调试,那么就只能通过关联源代码的形式,这样或多或少也有一些不方便,今 ...

随机推荐

  1. (2) arm 指令条件码

    条件码助记符 标志 含义 EQ Z=1 相等 NE Z=0 不相等 CS/HS C=1 无符号数大于或等于 CC/LO C=0 无符号数小于 MI N=1 负数 PL N=0 正数或0 VS V=1 ...

  2. MetInfo Password Reset Poisoning By Host Header Attack

    if we know some user's email, the we will can reset the user's email by host header attack. The atta ...

  3. Day005 for循环

    for循环 虽然所有循环结构都可以用while或者do-while表示,但java提供了另一种语句--for循环,使一些循环结构变得更加简单. for循环语句是支持迭代的一种通用结构,是最有效.最灵活 ...

  4. thinkphp 连接多个数据库(tp5.1为例)

    1.config目录下添加数据库配置,内容跟原数据库配置一样就可以(数据库名改成连接的第二个数据库名) 2.连接部分代码: $db = Db::connect(config('database2.') ...

  5. TortoiseGit:拉代码密码错误remote: Coding 提示: Authentication failed! 认证失败,请确认您输入了正确的账号密码

    问题 在控制面板里找到凭据管理器 修改密码之后拉取密码

  6. Salsa20算法介绍

    简介 Salsa20是一种流式对称加密算法,类似于Chacha20,算法性能相比AES能够快3倍以上. Salsa20算法通过将32 Byte的key和8 Byte的随机数nonce扩展为2^70 B ...

  7. GPUImage移植总结

    项目github地址: aoce 我是去年年底才知道有GPUImage这个项目,以前也一直没有在移动平台开发过,但是我在win平台有编写一个类似的项目oeip(不要关注了,所有功能都移植或快移植到ao ...

  8. JS数组的操作方法汇总

    数组的增删 push():添加到最后 pop():取出最后一个 shift():取出第一个 unshift():添加到第一个 splice() : 返回删除的数组,如果没有则为空数组,会改变原数组.可 ...

  9. 使用alpine为基础镜像Q&A

    作为go应用存在二进制文件却不能执行 明明镜像中有对应的二进制文件,但是执行时却提示 not found 或 no such file 或 standard_init_linux.go:211: ex ...

  10. [刷题] PTA 7-62 切分表达式 写个tokenizer吧

    我的程序: 1 #include<stdio.h> 2 #include<string.h> 3 #define N 50 4 char token[]= {'+','-',' ...