如图
服务器上crontab一个文件,4个线程处理,文件内是foreach循环一个表的数据的操作,当然脚本文件执行也是非常慢,但是服务器上经常发送死锁,也就是进程跑不动了。求解一下这个原因
死锁的原理,争抢相同的资源,但是使用顺序不同,如图我的线程执行的时间是相隔5分钟执行,但是跑一个线程的是超过7分钟的,是不是这个原因争抢相同的资源,我把时间调成相同时间执行  或者调成相隔10分钟执行就不会争抢资源发送死锁了吧?
望各位老哥们解答

解决方案 »

  1.   

    $productList = $productsManage->getAllActiveProductList($fields, $params);
    //print_r($productList);exit;
    if (empty($productList)){
    die('没有获取到产品信息');
    }$table = "erp_products_data";
    $i = 0;
    //开始循环来计算吧
    foreach ($productList as $pro){

    //SKU
    $sku       = trim($pro['products_sku']);
    $warehouse = $pro['product_warehouse_id'];
    $id        = $pro['products_id']; //计算利润率
    $avgProfitRate = $getTotals->getSkuFiveAverage($sku); //计算60天退款次数
    $skuMoneybackCount = getSkuMoneybackCount($sku); //计算各仓库的60天销量
    $sold_60 = getSalesTotalInSalesRecordMinDays($sku, 60 ,$v['product_warehouse_id']); $data                  = array();
    $data['sold_60']       = $sold_60;
    $data['backMoney_60']  = $skuMoneybackCount;
    $data['profitRate_15'] = $avgProfitRate; $where = " products_id=".$id;
    $doSql->update($table, $data, $where);
    if($i>5998){
    $end_time = microtime(true);
    $ret_time = $end_time - $start_time ;
    echo "Code execution time is ".$ret_time." second";
    echo 'the end...';
    exit;
    }
    $i++;
    }