多线程检测服务器响应时间小工具

5 篇文章 0 订阅
2 篇文章 0 订阅

在日常工作当中,网络不稳定时有发生,由于该类问题往往呈现不稳定,时好时坏的情况,如果采取手动测试的方法,往往不能充分说明问题。所以,进行一段时间的连续监测是必要的。由于需要长时间监视,为了防止前台卡死与资源消耗,采用线程来进行网络监测。



1. C#中的线程。

分析需求,需要将参数传入线程。可以通过写一个线程类TestUrlThread来实现。该线程类将担负持有参数,持有线程主处理函数的功能。

    public class TestUrlThread
    {
        private string url;

        public TestUrlThread(string url)
        {
            this.url = url;
        }

        public void ThreadMain()
        {

                  //线程主处理函数,一般为一个循环,反复探测服务器相应状况。记录日志。监测完成一次后,休息几秒钟继续监测。

                 //通过队列来实现。监测完成1次后,将结果写入队列。队列应保持对每个线程持有一个,并全局唯一。

        }
    }


1.线程开启。可在点击按钮后,触发线程的开启。

Thread thread1 = new Thread(new ThreadStart(testThread1.ThreadMain));

thread1.Start();

为了做对比,可以同时开两个线程,一个用来监测我们需要监测的服务器,一个用来监测大型的稳定的网站。这样可以剔出掉自己网络不稳定造成的噪声。

使用两个写线程,一个读线程。


2.线程的等待与唤醒。

可使用lock, pulse(All), Wait搭配使用,进行线程的调度。

其中,lock为获得锁。当写线程获得锁的时候,将监测结果送入队列。通知所有其他线程进入就绪状态(唤醒其他线程)。然后自己释放掉锁。自己进入等待通知状态。

使用pulse(All), Wait的好处在于线程主动将自己放入等待通知的队列中,这样不会占用CPU资源。如果一直用sleep,一则时间不灵活,二则消耗资源。

类似的,读线程在读取队列时,要先获得锁。在读取到队列为空的时候,调用pulse(All),wait来唤醒写线程,同时自己释放锁,将自己进入等待通知

                lock (BasicWaitHandler.lockObj)
                {
                    if (url == "https://www.baidu.com")
                    {
                        QueueMgr.getInstance().enSQueue(log);
                    }
                    else
                    {
                        QueueMgr.getInstance().enQueue(log);
                    }
                    //wait 1s

                    Thread.Sleep(1000);

                    Monitor.PulseAll(BasicWaitHandler.lockObj);
                    Monitor.Wait(BasicWaitHandler.lockObj);
                }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值