如何使用多线程进行计算

qwpking 2010-10-25 01:46:09
有一个公式例如 a+b=c 求从1到1亿 符合这个公式的数写到txt中 想使用线程来计算 请问该如何使用线程来生成这些数!
...全文
200 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qwpking 2010-10-25
  • 打赏
  • 举报
回复
是B/S的!主要有3个方法

private void thread() {

Mythread = new Thread[5];
ThreadStart ts = new ThreadStart(createno);
for (int i = 0; i < 5; i++) {
Mythread[i] = new Thread(ts);
Mythread[i].Name = "Thread" + i;
Mythread[i].Start();
}
}


private void createno() {

while (true) {
newint++;
if (nocount > 0) {
Int64 nos = newint;

if (验证公式) {
if (nocount > 0) {
nolist.Add(nos);
createFile(nos.ToString());
nocount--;
}
}

}
else if (nocount == 0) {
Thread.CurrentThread.Abort();
}
}


}


private void createFile(string s) {
if (s.Length > 0) {
string fileName;
string FileName;
string FilePath;
int txtsize = 10000;
int count = nolist.Count;
// for (int i = 0; i < arr.Count; i++) {
if (count != 0 && (count % txtsize == 0 || nocount == 0)) {

fileName = DateTime.Now.Day.ToString() + "_" + txt.Substring(0, 16) + ".txt";//生成粗略文件名
FileName = "TxTdata\\" + DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString();//生成文件夹名称
FilePath = Server.MapPath(FileName + "\\");//生成文件存放路径
if (Directory.Exists(FilePath) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(FilePath);
}

FileStream fs = new FileStream(FilePath + fileName, FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("utf-8"));
sw.Flush();
sw.BaseStream.Seek(0, SeekOrigin.Begin);
sw.WriteLine(txt);
sw.Flush();
sw.Close();
txt = "";
}
else {
txt += s + "\r\n";
}
}
}


麻烦各位看一下!有没办法优化一下!用这个每次生成10000个数放入txt中要用很长时间!不知道是不是线程用得不好,有时候生成不了文件!
夺命胖子 2010-10-25
  • 打赏
  • 举报
回复
这个是C/S还是B/S?

直接定义一个线程,运行你那一套计算得到数据的程序,

得到数据后,你可以缓存一些数,比如在内存中缓存50W个数,达到50W后读入txt,然后清空缓存


winner2050 2010-10-25
  • 打赏
  • 举报
回复
这么简单的数学运算,应该很快的。


瓶颈是写入文本文件太密集了,硬盘寻道需要时间的。
用个数组或者泛型 List 来保存结果,然后一次性写入 txt 。
qwpking 2010-10-25
  • 打赏
  • 举报
回复
能说详细点吗?谢谢!因为符合的数有4百万个左右,单计算就花咯很长时间!希望各位能详细的指点一下!
wuyq11 2010-10-25
  • 打赏
  • 举报
回复
Parallel.For - for 循环的并行运算
Parallel.ForEach - foreach 循环的并行运算
Parallel.Invoke - 并行调用多个任务
Task - 任务,基于线程池。
PLINQ - 用于对内存中的数据做并行运算
cpp2017 2010-10-25
  • 打赏
  • 举报
回复
瓶颈应该在io那里并不在运算.

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧