|
写了个序号生成,从1-11600000,用了5-10个线程跑,cpu都跑满了,磁盘写入速度才1.3mb左右,耗时40秒,1个线程反而磁盘写入速度能达到4mb,是不是多线程写的不行啊
快速生成索引文件 (“e:\123.txt”, 11600000 )|
快速生成索引文件 | 双精度小数型 | | |
文件路径 | 文本型 | | | | 最大索引 | 长整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 文件号 | 整数型 | | | 线程数 | 整数型 | | | 块值 | 整数型 | | | 余数 | 双精度小数型 | | | i | 整数型 | | | 启动时间 | 整数型 | | |
文件号 = 文件_打开文件A (文件路径, , , #CREATE_ALWAYS )文件_移动读写位置Ex (文件号, #FILE_BEGIN, 求索引序号占用字节 (最大索引 )) 文件_设置文件尾 (文件号 )文件_关闭文件 (文件号 )线程数 = 3 块值 = 绝对取整 (最大索引 ÷ 线程数 )余数 = 绝对取整 (最大索引 % 线程数 )启动时间 = 取启动时间 ()集_线程池. 创建 (线程数, 线程数, , , )计次循环首 (线程数, i )集_线程池. 投递任务 (&子程序1, i - 1, 块值 )程序_延时 (100 )计次循环尾 ()如果真 (余数 ≠ 0 )子程序1 (i - 1, 块值, 余数 )判断循环首 (集_线程池. 取_是否空闲 () = 假)程序_延时 (100 )判断循环尾 ()集_线程池. 销毁 ()调试输出 (“执行完毕”, 取启动时间 () - 启动时间 )返回 (0 )变量名 | 类 型 | 静态 | 数组 | 备 注 | 文件号 | 整数型 | | | i | 整数型 | | | 初始值 | 双精度小数型 | | | 文本 | 字节集 | | | 写入的文本 | 字节集 | | | 计次 | 整数型 | | |
文件号 = 文件_打开文件A (“e:\123.txt”, , #FILE_SHARE_READ + #FILE_SHARE_WRITE, #OPEN_ALWAYS, )初始值 = 索引 × 块值 文件_移动读写位置 (文件号, #FILE_BEGIN, 求索引序号占用字节 (初始值 )) 如果真 (余数 > 0 )块值 = 余数 计次循环首 (块值, i )文本 = 到字节集 (到文本 (初始值 + i )) 写入的文本 = 写入的文本 + 文本 + { 13, 10 }计次 = 计次 + 1 如果真 (计次 = 50 )文件_写出字节集 (文件号, 写入的文本 )计次 = 0 写入的文本 = { }计次循环尾 ()如果真 (写入的文本 ≠ { })文件_写出字节集 (文件号, 写入的文本 )计次 = 0 写入的文本 = { }关闭文件 (文件号)变量名 | 类 型 | 静态 | 数组 | 备 注 | 字节数 | 长整数型 | | | 数字长度 | 整数型 | | | 剩余数 | 长整数型 | | | 换行长度 | 整数型 | | | 积数 | 长整数型 | | | 十的次方 | 长整数型 | | | 循环次数 | 整数型 | | | 最大索引 | 长整数型 | | |
换行长度 = 2 最大索引 = 最大索引序号 判断循环首 (最大索引 > 0 )循环次数 = 循环次数 + 1 数字长度 = 取文本长度 (到文本 (最大索引 )) 判断 (数字长度 > 1 )十的次方 = 求次方 (10, 数字长度 - 1 )剩余数 = 最大索引 (最大索引 - 十的次方 ) - 1 积数 = 最大索引 - 剩余数 最大索引 = 剩余数 字节数 = 字节数 + 积数 (数字长度 + 换行长度 )字节数 = 字节数 + 最大索引 (1 + 换行长度 )跳出循环 ()判断循环尾 ()返回 (字节数 )
|
|