Le Vendredi 26 Août 2005 01:45, Brendan Lally a écrit : > On 8/25/05, Anton Oussik < antonoussik at gmail.com > wrote: > > A solution I propose is to pre-load large maps and keep them around in > > memory in case they are needed. quite difficult to implement :) > > Depends what you mean by pre-load. It might be possible to have the > server check each map when it loads, and then load all maps on exits > leading of from that map in an independent thread. > > Of course this requires that the map loading be thread-safe, and I'm > fairly sure it isn't. No it isn't as is the whole code of server. > > An alternitive (which might be easier) would be to have a seperate map > loading thread at all times, and when a player enters an exit, not > change their map to the new one, but instead place them in 'limbo' if > the map isn't loaded (a unique map which is 1x1 and has no objects. > Then the player object would need to check every tick to see if their > map is ready. This still poses some problems with what to do with the > command queue, if a player has hit multiple arrow keys, should they be > discarded? This isn't as simple, whole server code is thread unsafe, this mean if you load map in a separate thread you will break about all likned lsits used in server (objet pool, live objet lists, map lists, shared strings, and static variables used in some functions). > > The other approach is to simply say that all the world maps put > together are fairly small, compared to the amount of memory many > servers have these days (and this is increasingly more and more true), > so it would be possible to just load all maps at start up, and keep > them loaded until they reset. > There are 30x30 world maps each of them is 50x50 in size this makes 2.250.000 objects just for the ground objets I see 2 problems. First, each of the objects weighting 0.5k minimum (supposing all pointer in object structure points to null or common structures) we reach a total of 1098Megs used for background! (need to hack server to get a real value) Second, if my memory is still working well, this mean a linked list of 2.250.000 live objects in server, list which is checked on a regular basis to see if objects have some turns to play. This will slow down main server loop like hell. Perhaps a bit of work would be first to identify where in the loading code, it take time to load big maps using a profiler tool and then we can fix the real cause. > _______________________________________________ > crossfire mailing list > crossfire at metalforge.org > http://mailman.metalforge.org/mailman/listinfo/crossfire > >