Channels are built with locks which without biased locking can lead to delays 
as routines are scheduled / blocked under -especially under contention. 

github.com/robaho/go-concurrency-test might illuminate some other options to 
try. 

> On Jan 18, 2021, at 8:13 PM, Pete Wilson <peter.wil...@bsc.es> wrote:
> 
> No need to beg forgiveness.
> 
> For me, the issue is the synchronisation, not how the collection is specified.
> You’re right; there’s no reason why a slice (or an array) couldn’t be used to 
> define the collection. In fact, that’s the plan.
> But the synchronisation is still a pain.
> 
> FWIW I built a channel-based experiment.
> 
> I have N worker threads plus main
> I have an N channel array toworkers; each gets a pointer to its own channel
> I have an N-buffered channel fromthreads
> 
> workers wait for an input on their input
> when they get it, they send something on the buffered channel back to main
> ..each loops L times
> 
> main sends to each worker on its own channel
> main waits for N responses on the communal buffered channel
> .. loops L times
> 
> The end result is that
>       - at one goroutine per core, message send or receive costs 100-200 nsec
>       - but the 6-core, 12-virtual core processor only runs at 2.5 cores 
> worth of load.
>       - presumably, the go runtime has too much overhead timeslicing its 
> thread when there’s only one goroutine per thread or core
> 
> If we put 32 threads per core, so the go runtime is busily engaged in 
> multiplexing goroutines onto a thread, cost per communication drops to around 
> 50-60 ns
> 
> For my purposes, that’s far too many threads (gororutines) but it does 
> suggest that synchronisation has an upper limit cost of 50 ns.
> So tomorrow we try the custom sync approach. Results will be published.
> 
> Meanwhile, thanks to all for thoughts and advice
> 
> — P
> 
> 
>> On Jan 18, 2021, at 5:23 PM, golang-nuts@googlegroups.com wrote:
>> 
>> golang-nuts@googlegroups.com Google Groups   
>> Topic digest 
>> View all topics
>> [ANN] New Go package: xmorph - 1 Update
>> nil pointer ref can't figure out why - 3 Updates
>> Advice, please - 2 Updates
>> confusing compile error message after renaming module - 2 Updates
>> [ANN] New Go package: xmorph
>> Scott Pakin <scott...@pakin.org>: Jan 18 12:24PM -0800 
>> 
>> It's perhaps a bit of a niche tool, but I just released *xmorph*, a package 
>> for warping and morphing images. The code is available from
>>  
>> https://github.com/spakin/xmorph
>>  
>> (If nothing else, you can see there my crude attempt at morphing the 
>> cartoon Go gopher into the corresponding plush toy.)
>>  
>> The Go package is essentially a wrapper for the C libmorph library (
>> http://xmorph.sourceforge.net/), which is what the morph CLI and the xmorph 
>> and gtkmorph GUIs build upon.
>>  
>> Enjoy!
>>  
>> — Scott
>> Back to top
>> nil pointer ref can't figure out why
>> Alexander Mills <mlls...@justin.tv>: Jan 18 12:00PM -0800 
>> 
>> I have this line:
>>  
>> fmt.Printlin("the dao:", dao);
>>  
>> and it logs:
>>  
>> the dao: &{<nil> <nil>}
>>  
>>  
>> the overall method looks like:
>>  
>> func (dao *UserAttributeDao) GetDecryptedUserAttributes(workflowID string) 
>> (*PayoutUserAttributeRecord, error) {
>> getItemInput := &dynamodb.GetItemInput{
>> TableName: aws.String(payoutUserAttributesTableName),
>> ConsistentRead: aws.Bool(true),
>> Key: map[string]*dynamodb.AttributeValue{
>> payoutUserAttributesPK: {S: aws.String(workflowID)},
>> },
>> }
>>  
>> fmt.Println("the dao:", dao) 
>>  
>> record, err := dao.GetItem(getItemInput) // NIL POINTER REF HERE
>> if err != nil {
>> logrus.WithError(err).Errorf("error during GetItem from DynamoDB table %v 
>> for id: %v",
>> payoutUserAttributesTableName, workflowID)
>> return nil, err
>> }
>>  
>>  
>> does anyone know why calling the method would result in a nil pointer? To 
>> me it seems like the object for which the method is being called is nil, 
>> but that doesn't make that much sense to me. My main method looks like:
>>  
>> func main() {
>> log.Println("doing some printing")
>>  
>> var d = new(lib.UserAttributeDao)
>> x, err := d.GetDecryptedUserAttributes(""); // THIS RESULTS IN NIL POINTER
>>  
>> if err != nil {
>> log.Fatal(err)
>> }
>>  
>> }
>>  
>>  
>> ....
>> Axel Wagner <axel.wagner...@googlemail.com>: Jan 18 09:16PM +0100 
>> 
>> On Mon, Jan 18, 2021 at 9:12 PM 'Alexander Mills' via golang-nuts <
>>  
>> > does anyone know why calling the method would result in a nil pointer? To
>> > me it seems like the object for which the method is being called is nil
>>  
>> No, it is a pointer to a struct with two fields, both of which are nil. It
>> says `&{<nil> <nil>}`, not `<nil>`.
>>  
>>  
>> > var d = new(lib.UserAttributeDao)
>>  
>> You are initializing `d` to a pointer, pointing at the zero value of
>> `lib.UserAttributeDao` - which is a struct with two fields, I assume. So,
>> for the zero value, both of those are nil.
>>  
>>  
>> Axel Wagner <axel.wagner...@googlemail.com>: Jan 18 09:17PM +0100 
>> 
>> You might want to use `Printf("the dao: %+v", dao)`, for example - it will
>> also print type-names and should make it more obvious what you have.
>>  
>> On Mon, Jan 18, 2021 at 9:16 PM Axel Wagner <axel.wagner...@googlemail.com>
>> wrote:
>>  
>> Back to top
>> Advice, please
>> Kevin Chadwick <m8il1i...@gmail.com>: Jan 18 12:39PM 
>> 
>> On 1/17/21 4:46 PM, Bakul Shah wrote:
>>  
>> > With linked lists you’re wasting half of the memory bandwidth and 
>> > potentially
>> > the cache. Your # of elements are not going to change so a linked list 
>> > doesn’t
>> > buy you anything. An array is ideal from a performance PoV.
>>  
>> Potentially forgive me and ignore this message if inappropriate as I haven't
>> been paying close attention to this thread at all really.
>>  
>> However, it strikes me that arrays are perfectly usable in GO. Similarly to 
>> how
>> you might use a global array with tinygo to ensure memory usage limits are 
>> not
>> breached. What is the issue of using an array in Go? Even a global one, *IF*
>> suited to the task at hand and dishing the work out to workers with a scheme 
>> a
>> little more complex than odd, even etc. as required?
>>  
>> With the benefit that an off by one etc. causes a panic and not something
>> potentially worse?
>> Bakul Shah <ba...@iitbombay.org>: Jan 18 10:50AM -0800 
>> 
>> > breached. What is the issue of using an array in Go? Even a global one, 
>> > *IF*
>> > suited to the task at hand and dishing the work out to workers with a 
>> > scheme a
>> > little more complex than odd, even etc. as required?
>>  
>> Go arrays are perfectly usable. My comment had more to do with the fact that
>> you'd just have a fixed number of threads and if synchronization using 
>> channels
>> is not fast enough, you'd have to roll your own, in which case Go doesn't
>> really buy you much. I'd just keep the simulator code as a separate process
>> that does nothing but simulation and have it communicate with a separate
>> program that does visualization, logging etc. which can be in Go. Pete Wilson
>> in his response said that simulated cores are already generated functions in 
>> C
>> so this is not a big step. I'd just have the code generator generate the 
>> whole
>> simulator or something like it. Just different tradeoffs to consider.
>> Back to top
>> confusing compile error message after renaming module
>> DrGo <salah.mah...@gmail.com>: Jan 17 08:14PM -0800 
>> 
>> Wondering if someone knows what is going on here:
>>  
>> I renamed a module in go.mod from liverserver [sic] to gols and imported it 
>> in main.go in a "cmd" subdir. Now I am getting this error when I compile 
>> main.go: 
>>  
>> ./main.go:8:2: imported and not used: "github.com/drgo/gols" as liverserver
>> ./main.go:13:12: undefined: gols
>> ./main.go:60:12: undefined: gols 
>>  
>> These are the lines referred to in the compiler output above
>>  
>> import (
>> "github.com/drgo/gols" 
>> )
>>  
>> var config gols.Config 
>>  
>> if err :=gols.Serve(&config); err!= nil { 
>>  
>>  
>> go mod tidy and go go clean -cache -modcache -i -r did not make a 
>> difference.
>>  
>> why the compiler still wants to import gols as liverserver
>>  
>> I am using go1.16beta1 darwin/amd64
>>  
>> Thanks,
>> DrGo <salah.mah...@gmail.com>: Jan 17 08:21PM -0800 
>> 
>> Of course, once you post about a problem, you immediately figure it out.
>> I forgot to update the go files in the package folder to reflect the name 
>> change
>> package liverserver--> package gols fixes the issue.
>>  
>>  
>>  
>> On Sunday, January 17, 2021 at 10:14:36 PM UTC-6 DrGo wrote:
>>  
>> Back to top
>> You received this digest because you're subscribed to updates for this 
>> group. You can change your settings on the group membership page.
>> To unsubscribe from this group and stop receiving emails from it send an 
>> email to golang-nuts+unsubscr...@googlegroups.com.
> 
> 
> 
> 
> 
> WARNING / LEGAL TEXT: This message is intended only for the use of the 
> individual or entity to which it is addressed and may contain information 
> which is privileged, confidential, proprietary, or exempt from disclosure 
> under applicable law. If you are not the intended recipient or the person 
> responsible for delivering the message to the intended recipient, you are 
> strictly prohibited from disclosing, distributing, copying, or in any way 
> using this message. If you have received this communication in error, please 
> notify the sender and destroy and delete any copies you may have received. 
> 
> http://www.bsc.es/disclaimer 
> 
> 
> 
> 
> 
> 
> WARNING / LEGAL TEXT: This message is intended only for the use of the 
> individual or entity to which it is addressed and may contain information 
> which is privileged, confidential, proprietary, or exempt from disclosure 
> under applicable law. If you are not the intended recipient or the person 
> responsible for delivering the message to the intended recipient, you are 
> strictly prohibited from disclosing, distributing, copying, or in any way 
> using this message. If you have received this communication in error, please 
> notify the sender and destroy and delete any copies you may have received. 
> 
> http://www.bsc.es/disclaimer 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/1033748D-DA67-417C-AAC8-391409034FF2%40bsc.es.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/51AA5ADB-F3BE-4A47-A44E-632D2E41E4C9%40ix.netcom.com.

Reply via email to