// Show a number of writers and readers operating concurrently from unique // destinations. func main() { st := time.Now() sngecomm.ShowRunParms(exampid) ll.Printf("%stag:%s connsess:%s main_starts\n", exampid, tag, sngecomm.Lcs) ll.Printf("%stag:%s connsess:%s main_profiling pprof:%v\n", exampid, tag, sngecomm.Lcs, sngecomm.Pprof()) ll.Printf("%stag:%s connsess:%s main_current_GOMAXPROCS gmp:%v\n", exampid, tag, sngecomm.Lcs, runtime.GOMAXPROCS(-1)) if sngecomm.SetMAXPROCS() { nc := runtime.NumCPU() ll.Printf("%stag:%s connsess:%s main_current_num_cpus cncpu:%v\n", exampid, tag, sngecomm.Lcs, nc) gmp := runtime.GOMAXPROCS(nc) ll.Printf("%stag:%s connsess:%s main_previous_num_cpus pncpu:%v\n", exampid, tag, sngecomm.Lcs, gmp) ll.Printf("%stag:%s connsess:%s main_current_GOMAXPROCS gmp:%v\n", exampid, tag, sngecomm.Lcs, runtime.GOMAXPROCS(-1)) } // sw = sngecomm.SendWait() rw = sngecomm.RecvWait() sf = sngecomm.SendFactor() rf = sngecomm.RecvFactor() ll.Printf("%stag:%s connsess:%s main_wait_sleep_factors sw:%v rw:%v sf:%v rf:%v\n", exampid, tag, sngecomm.Lcs, sw, rw, sf, rf) // q := sngecomm.Nqs() // wga.Add(2) go startReceivers(q) go startSenders(q) wga.Wait() ll.Printf("%stag:%s connsess:%s main_elapsed:%v\n", exampid, tag, sngecomm.Lcs, time.Now().Sub(st)) }
func main() { st := time.Now() sngecomm.ShowRunParms(exampid) ll.Printf("%stag:%s connsess:%s main_starts\n", exampid, tag, sngecomm.Lcs) ll.Printf("%stag:%s connsess:%s main_profiling pprof:%v\n", exampid, tag, sngecomm.Lcs, sngecomm.Pprof()) ll.Printf("%stag:%s connsess:%s main_current_GOMAXPROCS gmp:%v\n", exampid, tag, sngecomm.Lcs, runtime.GOMAXPROCS(-1)) if sngecomm.SetMAXPROCS() { nc := runtime.NumCPU() ll.Printf("%stag:%s connsess:%s main_current_num_cpus cncpu:%v\n", exampid, tag, sngecomm.Lcs, nc) gmp := runtime.GOMAXPROCS(nc) ll.Printf("%stag:%s connsess:%s main_previous_num_cpus pncpu:%v\n", exampid, tag, sngecomm.Lcs, gmp) ll.Printf("%stag:%s connsess:%s main_current_GOMAXPROCS gmp:%v\n", exampid, tag, sngecomm.Lcs, runtime.GOMAXPROCS(-1)) } // sw = sngecomm.SendWait() rw = sngecomm.RecvWait() sf = sngecomm.SendFactor() rf = sngecomm.RecvFactor() ll.Printf("%stag:%s connsess:%s main_wait_sleep_factors sw:%v rw:%v sf:%v rf:%v\n", exampid, tag, sngecomm.Lcs, sw, rw, sf, rf) // numq := sngecomm.Nqs() nmsgs = senv.Nmsgs() // message count // ll.Printf("%stag:%s connsess:%s main_starting_receivers\n", exampid, tag, sngecomm.Lcs) for q := 1; q <= numq; q++ { wgr.Add(1) go runReceiver(q) } ll.Printf("%stag:%s connsess:%s main_started_receivers\n", exampid, tag, sngecomm.Lcs) // ll.Printf("%stag:%s connsess:%s main_starting_senders\n", exampid, tag, sngecomm.Lcs) for q := 1; q <= numq; q++ { wgs.Add(1) go runSender(q) } ll.Printf("%stag:%s connsess:%s main_started_senders\n", exampid, tag, sngecomm.Lcs) // wgs.Wait() ll.Printf("%stag:%s connsess:%s main_senders_complete\n", exampid, tag, sngecomm.Lcs) wgr.Wait() ll.Printf("%stag:%s connsess:%s main_receivers_complete\n", exampid, tag, sngecomm.Lcs) // // The end ll.Printf("%stag:%s connsess:%s main_elapsed:%v\n", exampid, tag, sngecomm.Lcs, time.Now().Sub(st)) }
// Show a number of writers and readers operating concurrently from unique // destinations. func main() { st := time.Now() sngecomm.ShowRunParms(exampid) ll.Printf("%stag:%s connsess:%s main_starts\n", exampid, tag, sngecomm.Lcs) ll.Printf("%stag:%s connsess:%s main_profiling pprof:%v\n", exampid, tag, sngecomm.Lcs, sngecomm.Pprof()) ll.Printf("%stag:%s connsess:%s main_current_GOMAXPROCS gmp:%v\n", exampid, tag, sngecomm.Lcs, runtime.GOMAXPROCS(-1)) if sngecomm.SetMAXPROCS() { nc := runtime.NumCPU() ll.Printf("%stag:%s connsess:%s main_current_num_cpus cncpu:%v\n", exampid, tag, sngecomm.Lcs, nc) gmp := runtime.GOMAXPROCS(nc) ll.Printf("%stag:%s connsess:%s main_previous_num_cpus pncpu:%v\n", exampid, tag, sngecomm.Lcs, gmp) ll.Printf("%stag:%s connsess:%s main_current_GOMAXPROCS gmp:%v\n", exampid, tag, sngecomm.Lcs, runtime.GOMAXPROCS(-1)) } // Wait flags sw = sngecomm.SendWait() rw = sngecomm.RecvWait() sf = sngecomm.SendFactor() rf = sngecomm.RecvFactor() ll.Printf("%stag:%s connsess:%s main_wait_sleep_factors sw:%v rw:%v sf:%v rf:%v\n", exampid, tag, sngecomm.Lcs, sw, rw, sf, rf) // Number of queues nqs := sngecomm.Nqs() // Standard example connect sequence var e error n, conn, e = sngecomm.CommonConnect(exampid, tag, ll) if e != nil { if conn != nil { ll.Printf("%stag:%s connsess:%s Connect Response headers:%v body%s\n", exampid, tag, conn.Session(), conn.ConnectResponse.Headers, string(conn.ConnectResponse.Body)) } ll.Fatalf("%stag:%s connsess:%s main_on_connect error:%v", exampid, tag, sngecomm.Lcs, e.Error()) // Handle this ...... } // Many receivers running under the same connection can cause // (wire read) performance issues. This is *very* dependent on the broker // being used, specifically the broker's algorithm for putting messages on // the wire. // To alleviate those issues, this strategy insures that messages are // received from the wire as soon as possible. Those messages are then // buffered internally for (possibly later) application processing. In // this example, buffering occurs in the stompngo package. conn.SetSubChanCap(senv.SubChanCap()) // Experiment with this value, YMMV // Run everything wga.Add(2) go startReceivers(nqs) go startSenders(nqs) wga.Wait() // Standard example disconnect sequence e = sngecomm.CommonDisconnect(n, conn, exampid, tag, ll) if e != nil { ll.Fatalf("%stag:%s connsess:%s main_on_disconnect error:%v", exampid, tag, conn.Session(), e.Error()) // Handle this ...... } sngecomm.ShowStats(exampid, tag, conn) ll.Printf("%stag:%s connsess:%s main_elapsed:%v\n", exampid, tag, conn.Session(), time.Now().Sub(st)) }